我可以按如下方式分配一个元组:
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
and c
在那个例子中是not相同n
and c
定义得更早一些。模式匹配会将值分配给new身份标识n
and c
,这将影响之前的范围定义case
陈述。同样的事情也发生在for
例如,没有改变n
and c
先前定义的。
现在,您想要发生的是覆盖以前的值,而不是为新标识符分配新值。这不是模式匹配的工作原理,这意味着要实现它需要一个全新的规则。由于 Scala 温和地促使人们走向不变性,我认为他们没有创建一个新规则来处理这个问题并不是没有道理的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)