我可以如下分配一个元组:
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
为什么后面的工作,而前者没有?
好了,因为它是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)
}
现在,取最后一个例子,用一个case
。 需要注意的是n
和c
在那个例子是不一样的n
和c
定义早一些。 模式匹配将值分配给新的标识符n
和c
,这将影子以前的定义为的escope case
声明。 同样的事情发生在for
例子,这并没有改变n
和c
先前定义。
现在,要发生什么是覆盖以前的值,而不是分配新值,新的标识符。 这不是怎样的模式匹配工作,这意味着促成这件事情将带来一个全新的规则。 由于斯卡拉轻轻电棒人民走向永恒,我想这是没有道理的,他们并没有创造一个新的规则只是为了处理这个问题。