복붙노트

[SCALA] 튜플 매개 변수 선언과 할당 기이

SCALA

튜플 매개 변수 선언과 할당 기이

다음과 같이 나는 튜플을 할당 할 수 있습니다 :

var (min, max) = (1, 2)

다음과 같이 그러나 나는 다음을 다시 할당 할 수 없습니다

(min, max) = (1, 3) //compiler error: ';' expected but '=' found

대신에 내가해야 할 것 같다 :

min = 1
max = 3

이전하지 않는 반면, 왜 후자 작동합니까?

해결법

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

    1.그것은 그런 식으로 spec'ed 때문에 글쎄, 나는 가정한다.

    그것은 그런 식으로 spec'ed 때문에 글쎄, 나는 가정한다.

    이것은 튜플 할당 패턴 매칭의 한 예이다. 패턴 매칭은 필자가 기억하는 것이 세 곳에서 일어나는 :

    var PATTERN = ... // or val
    
    for (PATTERN <- ...) ...
    
    case PATTERN => ...
    

    그래서이 모든 경우 작동 :

    val l = List((1,'a'), (2,'b'), (3,'c'))
    var (n, c) = l(0)
    for ((n, c) <- l) println(n+": "+c)
    l(1) match {
      case (n, c) => println(n+": "+c)
    }
    

    이제 케이스를 사용하여 하나를 마지막으로 예를 들자면. 참고 N 및 그 실시 예에서 C가 약간 앞에서 정의한 동일한 N 및 C 아니다. 패턴 일치는 케이스 문의 escope의 이전 정의를 그림자하는 새로운 식별자 N과 C에 값을 할당합니다. N 변경하고 C하지 않았다 예를 들어에 무슨 일이 있었 같은 일이, 이전에 정의.

    자, 오류가 발생하는 대신 새로운 식별자 할당 새 값의 이전 값을 덮어 쓸 것입니다. 그건하지 어떻게 패턴 매칭 작업, 어떤 수단이 완전히 새로운 규칙을 수반 발생하고. 스칼라 부드럽게 불변성으로 사람을 PRODS 때문에, 나는 그들은 단지이 문제를 처리하기 위해 새로운 규칙을 작성하지 않은 무리한 아니다 가정합니다.

  2. from https://stackoverflow.com/questions/1624484/tuple-parameter-declaration-and-assignment-oddity by cc-by-sa and MIT license