복붙노트

[SCALA] 왜 튜플에 대한 스칼라의 구문은 매우 특별하다?

SCALA

왜 튜플에 대한 스칼라의 구문은 매우 특별하다?

따라서, 예를 들어, 파이썬에서 튜플의 두 번째 항목은 t [1]를 통해 액세스 할 수있다.

스칼라에서 접근이 이상한 이름 t._2를 통해서만 가능하다.

질문은 그래서, 할 수없는 이유는 그것이 정의 경우 시퀀스 또는 목록과 같은 튜플에서 I 데이터에 액세스? 아이디어의 어떤 종류가 있습니까 또는 아직 검사하지?

해결법

  1. ==============================

    1.스칼라는 튜플의 인수에 대응을 알고 있으며, 따라서 등, _2, _1처럼 접근을 제공하고, 당신은 예를 들어, 한 쌍에 _3을 선택하면 컴파일 타임 오류가 발생 할 수 있습니다. 또한, 이러한 필드의 타입이 타입 (float를 반환하는 Tuple3 [INT, 더블, 플로트]에 들어 _3) 튜플 파라미터로 정확히.

    스칼라는 튜플의 인수에 대응을 알고 있으며, 따라서 등, _2, _1처럼 접근을 제공하고, 당신은 예를 들어, 한 쌍에 _3을 선택하면 컴파일 타임 오류가 발생 할 수 있습니다. 또한, 이러한 필드의 타입이 타입 (float를 반환하는 Tuple3 [INT, 더블, 플로트]에 들어 _3) 튜플 파라미터로 정확히.

    당신은 n 번째 요소에 액세스하려면 tuple.productElement (N)를 기록 할 수 있지만이 유형의 정보를 잃을 수 있도록이의 반환 유형은, 하나가 될 수 있습니다.

  2. ==============================

    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. ==============================

    3.목록, 서열 또는 수집 및 튜플 사이에 하나 개의 큰 차이는 튜플의 각 요소는 목록의 모든 요소가 같은 유형이 그것의 자신의 유형을 가지고 있다는 것입니다.

    목록, 서열 또는 수집 및 튜플 사이에 하나 개의 큰 차이는 튜플의 각 요소는 목록의 모든 요소가 같은 유형이 그것의 자신의 유형을 가지고 있다는 것입니다.

    그리고 결과로, 스칼라에 그렇게 각 요소에 대해 당신은 또한 형식 매개 변수를 가지고 Tuple2 [T1, T2] 또는 Tuple3 [T1, T2, T3] 같은 클래스를 찾을 수 있습니다. 목록 [T] : 컬렉션은 1 유형 매개 변수를 받아들입니다. ( "테스트", 123, 새로운 일)과 같은 구문 Tuple3 [문자열, INT, 날짜] 단지 문법 설탕입니다. 그리고 _1, _2 등 튜플 돌려 특파원 요소에 불과 필드가 있습니다.

  4. ==============================

    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. ==============================

    5.일반 인덱스 액세스로, 어떤 표현을 사용할 수 있습니다, 그것은 인덱스 식의 결과가이 범위로 보장되는 경우 컴파일 타임에 확인하는 심각한 노력을 것입니다. 이 속성, 그리고 (3) 다음 (1, 2) ._에 대한 컴파일 타임 오류 "무료"합니다. 튜플에 대한 항목에 액세스 내부 상수는 아주 특별한 경우가 될 것이다 정수 전용 (추한 불필요한을, 일부는 말도 안되는 말을) 허용 같은 것들 다시 몇 가지 작업은 컴파일러에서 구현합니다.

    일반 인덱스 액세스로, 어떤 표현을 사용할 수 있습니다, 그것은 인덱스 식의 결과가이 범위로 보장되는 경우 컴파일 타임에 확인하는 심각한 노력을 것입니다. 이 속성, 그리고 (3) 다음 (1, 2) ._에 대한 컴파일 타임 오류 "무료"합니다. 튜플에 대한 항목에 액세스 내부 상수는 아주 특별한 경우가 될 것이다 정수 전용 (추한 불필요한을, 일부는 말도 안되는 말을) 허용 같은 것들 다시 몇 가지 작업은 컴파일러에서 구현합니다.

    파이썬은, 예를 들어, 멀리 얻을 수 있기 때문에 인덱스 어쨌든 범위에있는 경우입니다 (컴파일 타임에서) 그것을 것 없습니다 (수 없었다) 검사.

  6. ==============================

    6.나는 그것이 유형 검사에 대해 생각합니다. delnan이 말한대로 당신이 튜플 t 및 인덱스 전자 (임의의 표현), t (전자)이있는 경우, 컴파일러에게 요소에 액세스하고있는 대한 아무런 정보를 제공하지 않습니다 (또는 그 크기의 튜플에 대한 유효한 요소의 경우에도 것 ). 당신은 필드 이름으로 요소에 액세스 할 때, 컴파일러는 액세스중인 필드 알고 그것을 가지고 무엇을 입력 (_2는 특수 구문이 아니다, 유효한 식별자입니다). 이 그들을 필요하지 않습니다 그래서 파이썬과 같은 언어는 정말 유형이 없습니다.

    나는 그것이 유형 검사에 대해 생각합니다. delnan이 말한대로 당신이 튜플 t 및 인덱스 전자 (임의의 표현), t (전자)이있는 경우, 컴파일러에게 요소에 액세스하고있는 대한 아무런 정보를 제공하지 않습니다 (또는 그 크기의 튜플에 대한 유효한 요소의 경우에도 것 ). 당신은 필드 이름으로 요소에 액세스 할 때, 컴파일러는 액세스중인 필드 알고 그것을 가지고 무엇을 입력 (_2는 특수 구문이 아니다, 유효한 식별자입니다). 이 그들을 필요하지 않습니다 그래서 파이썬과 같은 언어는 정말 유형이 없습니다.

  7. ==============================

    7.그렇다 혜택에서 장 - 필립 펠렛은 이미이 표기는 수학 (http://en.wikipedia.org/wiki/Tuple 참조) 매우 일반적인 언급했다. 그들은 튜플의 요소를 참조하려는 경우 강사의 많은 튜플 변수에 인덱스를 추가합니다. 그리고 (튜플의 N 번째 요소를 참조)」로 인덱스 N "쓰기위한 공통 (유액) 표기법 _n이다. 그래서 실제로 매우 직관적으로 찾을 수 있습니다.

    그렇다 혜택에서 장 - 필립 펠렛은 이미이 표기는 수학 (http://en.wikipedia.org/wiki/Tuple 참조) 매우 일반적인 언급했다. 그들은 튜플의 요소를 참조하려는 경우 강사의 많은 튜플 변수에 인덱스를 추가합니다. 그리고 (튜플의 N 번째 요소를 참조)」로 인덱스 N "쓰기위한 공통 (유액) 표기법 _n이다. 그래서 실제로 매우 직관적으로 찾을 수 있습니다.

  8. from https://stackoverflow.com/questions/6884298/why-is-scalas-syntax-for-tuples-so-unusual by cc-by-sa and MIT license