Vâng, bởi vì nó được xác định theo cách đó, tôi cho là vậy.
Điều này, nhiệm vụ tuple, là ví dụ về đối sánh mẫu. Mô hình kết hợp xảy ra ở ba nơi mà tôi nhớ lại của:
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
Vì vậy, tất cả những trường hợp làm việc:
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)
}
Bây giờ, lấy ví dụ cuối cùng, là sử dụng case
. Lưu ý rằng n
và c
trong ví dụ đó là không cùng một số n
và c
được xác định trước đó một chút. So khớp mẫu sẽ chỉ định các giá trị cho new số nhận dạng n
và c
, sẽ làm mờ định nghĩa trước đó cho việc thoát khỏi tuyên bố case
. Điều tương tự cũng xảy ra trên ví dụ for
, đã không thay đổi n
và c
được xác định trước đó.
Bây giờ, những gì bạn muốn xảy ra là ghi đè giá trị trước đó, thay vì chỉ định giá trị mới cho số nhận dạng mới. Đó không phải là cách mô hình phù hợp với công trình, có nghĩa là làm cho nó xảy ra sẽ đòi hỏi một quy tắc hoàn toàn mới. Kể từ khi Scala nhẹ nhàng prods người đối với bất biến, tôi cho rằng nó không phải là không hợp lý họ đã không tạo ra một quy tắc mới chỉ để xử lý này.
Nguồn
2009-10-26 15:59:50
vé là https://issues.scala-lang.org/browse/SI-1324 ("nó sẽ cần một SIP") –