문제

다음과 같이 튜플을 할당 할 수 있습니다.

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

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

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

대신 나는해야 할 것 같다 :

min = 1
max = 3

후자는 왜 작동하지 않지만 전자는 그렇지 않습니까?

도움이 되었습니까?

해결책

글쎄, 그것이 그렇게 지정 되었기 때문에, 나는 생각합니다.

튜플 할당은 패턴 일치의 예입니다. 패턴 매칭은 다음을 기억하는 세 곳에서 발생합니다.

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)
}

이제 마지막 예를 들어 case. 주목하십시오 n 그리고 c 이 예에서는입니다 ~ 아니다 똑같다 n 그리고 c 조금 일찍 정의했습니다. 패턴 일치는 값을 할당합니다 새로운 식별자 n 그리고 c, 이는 case 성명. 같은 일이 일어났습니다 for 예를 들어 변경되지 않았습니다 n 그리고 c 이전에 정의되었습니다.

이제 일어나고 싶은 것은 새 값을 새 식별자에게 할당하는 대신 이전 값을 덮어 쓰는 것입니다. 그것은 패턴 매칭이 어떻게 작동하는지가 아닙니다. 즉,이를 통해 완전히 새로운 규칙이 수반됩니다. Scala는 부드럽게 사람들을 불변성으로 향하게하기 때문에, 나는 그들이 이것을 처리하기 위해 새로운 규칙을 만들지 않았다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top