[SCALA] 왜 튜플에 대한 스칼라의 구문은 매우 특별하다?
SCALA왜 튜플에 대한 스칼라의 구문은 매우 특별하다?
따라서, 예를 들어, 파이썬에서 튜플의 두 번째 항목은 t [1]를 통해 액세스 할 수있다.
스칼라에서 접근이 이상한 이름 t._2를 통해서만 가능하다.
질문은 그래서, 할 수없는 이유는 그것이 정의 경우 시퀀스 또는 목록과 같은 튜플에서 I 데이터에 액세스? 아이디어의 어떤 종류가 있습니까 또는 아직 검사하지?
해결법
-
==============================
1.스칼라는 튜플의 인수에 대응을 알고 있으며, 따라서 등, _2, _1처럼 접근을 제공하고, 당신은 예를 들어, 한 쌍에 _3을 선택하면 컴파일 타임 오류가 발생 할 수 있습니다. 또한, 이러한 필드의 타입이 타입 (float를 반환하는 Tuple3 [INT, 더블, 플로트]에 들어 _3) 튜플 파라미터로 정확히.
스칼라는 튜플의 인수에 대응을 알고 있으며, 따라서 등, _2, _1처럼 접근을 제공하고, 당신은 예를 들어, 한 쌍에 _3을 선택하면 컴파일 타임 오류가 발생 할 수 있습니다. 또한, 이러한 필드의 타입이 타입 (float를 반환하는 Tuple3 [INT, 더블, 플로트]에 들어 _3) 튜플 파라미터로 정확히.
당신은 n 번째 요소에 액세스하려면 tuple.productElement (N)를 기록 할 수 있지만이 유형의 정보를 잃을 수 있도록이의 반환 유형은, 하나가 될 수 있습니다.
-
==============================
2.난에서 다음 발췌 믿는다 "스칼라 프로그래밍을 : 종합 단계별 가이드"(마틴 오더 스키, 렉스 숟가락 빌 베너 스) 직접 질문을 모두 해결합니다
난에서 다음 발췌 믿는다 "스칼라 프로그래밍을 : 종합 단계별 가이드"(마틴 오더 스키, 렉스 숟가락 빌 베너 스) 직접 질문을 모두 해결합니다
스칼라 튜플은 언어 구문이 떨어져 표현에서, 우려까지로 약간의 우대를받을 '('A1은, ...,에 ')가'scala.Tuplen에 대한 별칭으로 컴파일러에 의해 치료를 받고 (A1, ... , AN) 클래스 인스턴스. 그렇지 않으면 튜플 사실 그들은 범위가 Tuple2에서 Tuple22에 케이스 클래스로 스칼라로 작성되어, 다른 스칼라 객체처럼 동작을한다. Tuple2 및 Tuple3은 각각 쌍 트리플의 별칭 아래 알려져있다 :
val a = Pair (1,"two") // same as Tuple2 (1,"two") or (1,"two") val b = Triple (1,"two",3.0) // same as Tuple3 (1,"two",3.0) or (1,"two",3.0)
-
==============================
3.목록, 서열 또는 수집 및 튜플 사이에 하나 개의 큰 차이는 튜플의 각 요소는 목록의 모든 요소가 같은 유형이 그것의 자신의 유형을 가지고 있다는 것입니다.
목록, 서열 또는 수집 및 튜플 사이에 하나 개의 큰 차이는 튜플의 각 요소는 목록의 모든 요소가 같은 유형이 그것의 자신의 유형을 가지고 있다는 것입니다.
그리고 결과로, 스칼라에 그렇게 각 요소에 대해 당신은 또한 형식 매개 변수를 가지고 Tuple2 [T1, T2] 또는 Tuple3 [T1, T2, T3] 같은 클래스를 찾을 수 있습니다. 목록 [T] : 컬렉션은 1 유형 매개 변수를 받아들입니다. ( "테스트", 123, 새로운 일)과 같은 구문 Tuple3 [문자열, INT, 날짜] 단지 문법 설탕입니다. 그리고 _1, _2 등 튜플 돌려 특파원 요소에 불과 필드가 있습니다.
-
==============================
4.당신은 쉽게 볼품와 그것을 달성 할 수있다 :
당신은 쉽게 볼품와 그것을 달성 할 수있다 :
import shapeless.syntax.std.tuple._ val t = ("a", 2, true, 0.0) val s = t(0) // String at compile time val i = t(1) // Int at compile time // etc
표준 수집을위한 가능한 방법의 많은 (이 방법 튜플에 사용할 수있는 머리, 꼬리, 초기화, 마지막 ++ 및 ::: 연결을위한, + : 및 : + 요소를 추가, 테이크, 드롭, 역, 우편 번호, 압축 해제 길이 toList, toArray [수집]로, ...)
-
==============================
5.일반 인덱스 액세스로, 어떤 표현을 사용할 수 있습니다, 그것은 인덱스 식의 결과가이 범위로 보장되는 경우 컴파일 타임에 확인하는 심각한 노력을 것입니다. 이 속성, 그리고 (3) 다음 (1, 2) ._에 대한 컴파일 타임 오류 "무료"합니다. 튜플에 대한 항목에 액세스 내부 상수는 아주 특별한 경우가 될 것이다 정수 전용 (추한 불필요한을, 일부는 말도 안되는 말을) 허용 같은 것들 다시 몇 가지 작업은 컴파일러에서 구현합니다.
일반 인덱스 액세스로, 어떤 표현을 사용할 수 있습니다, 그것은 인덱스 식의 결과가이 범위로 보장되는 경우 컴파일 타임에 확인하는 심각한 노력을 것입니다. 이 속성, 그리고 (3) 다음 (1, 2) ._에 대한 컴파일 타임 오류 "무료"합니다. 튜플에 대한 항목에 액세스 내부 상수는 아주 특별한 경우가 될 것이다 정수 전용 (추한 불필요한을, 일부는 말도 안되는 말을) 허용 같은 것들 다시 몇 가지 작업은 컴파일러에서 구현합니다.
파이썬은, 예를 들어, 멀리 얻을 수 있기 때문에 인덱스 어쨌든 범위에있는 경우입니다 (컴파일 타임에서) 그것을 것 없습니다 (수 없었다) 검사.
-
==============================
6.나는 그것이 유형 검사에 대해 생각합니다. delnan이 말한대로 당신이 튜플 t 및 인덱스 전자 (임의의 표현), t (전자)이있는 경우, 컴파일러에게 요소에 액세스하고있는 대한 아무런 정보를 제공하지 않습니다 (또는 그 크기의 튜플에 대한 유효한 요소의 경우에도 것 ). 당신은 필드 이름으로 요소에 액세스 할 때, 컴파일러는 액세스중인 필드 알고 그것을 가지고 무엇을 입력 (_2는 특수 구문이 아니다, 유효한 식별자입니다). 이 그들을 필요하지 않습니다 그래서 파이썬과 같은 언어는 정말 유형이 없습니다.
나는 그것이 유형 검사에 대해 생각합니다. delnan이 말한대로 당신이 튜플 t 및 인덱스 전자 (임의의 표현), t (전자)이있는 경우, 컴파일러에게 요소에 액세스하고있는 대한 아무런 정보를 제공하지 않습니다 (또는 그 크기의 튜플에 대한 유효한 요소의 경우에도 것 ). 당신은 필드 이름으로 요소에 액세스 할 때, 컴파일러는 액세스중인 필드 알고 그것을 가지고 무엇을 입력 (_2는 특수 구문이 아니다, 유효한 식별자입니다). 이 그들을 필요하지 않습니다 그래서 파이썬과 같은 언어는 정말 유형이 없습니다.
-
==============================
7.그렇다 혜택에서 장 - 필립 펠렛은 이미이 표기는 수학 (http://en.wikipedia.org/wiki/Tuple 참조) 매우 일반적인 언급했다. 그들은 튜플의 요소를 참조하려는 경우 강사의 많은 튜플 변수에 인덱스를 추가합니다. 그리고 (튜플의 N 번째 요소를 참조)」로 인덱스 N "쓰기위한 공통 (유액) 표기법 _n이다. 그래서 실제로 매우 직관적으로 찾을 수 있습니다.
그렇다 혜택에서 장 - 필립 펠렛은 이미이 표기는 수학 (http://en.wikipedia.org/wiki/Tuple 참조) 매우 일반적인 언급했다. 그들은 튜플의 요소를 참조하려는 경우 강사의 많은 튜플 변수에 인덱스를 추가합니다. 그리고 (튜플의 N 번째 요소를 참조)」로 인덱스 N "쓰기위한 공통 (유액) 표기법 _n이다. 그래서 실제로 매우 직관적으로 찾을 수 있습니다.
from https://stackoverflow.com/questions/6884298/why-is-scalas-syntax-for-tuples-so-unusual by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 추상 클래스를 구현 대 특색을 가진 스칼라 클라이언트 구성 (0) | 2019.11.28 |
---|---|
[SCALA] 스칼라의 오버로드 생성자와 함께 자신의 예외를 정의 (0) | 2019.11.28 |
[SCALA] 멀티 클래스 분류 예 불꽃 (0) | 2019.11.28 |
[SCALA] 어떻게 JSON으로 DataFrame를 변환하는? (0) | 2019.11.28 |
[SCALA] 스칼라 정규식은 여러 줄 옵션을 사용 (0) | 2019.11.28 |