25
如下我可以指定一個元組:元組參數聲明和分配古怪
var (min, max) = (1, 2)
但我不能那麼重新分配如下
(min, max) = (1, 3) //compiler error: ';' expected but '=' found
相反,我似乎有做:
min = 1
max = 3
爲什麼後者工作,而前者不是?
如下我可以指定一個元組:元組參數聲明和分配古怪
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
未發生變化。
現在,你想要發生的是覆蓋以前的值,而不是分配新的值到新的標識符。這不是模式匹配的工作方式,這意味着要實現它將需要一個全新的規則。既然斯卡拉輕輕地刺激人們走向不變,我想這不是不合理的,他們並沒有制定新的規則來處理這個問題。
門票是https://issues.scala-lang.org/browse/SI-1324(「它需要一個SIP」) –