假设我有一个函数可以在scala中返回多个值。
def foo:(Double, Double) = {
(1.1, 2.2)
}
我可以按如下方式调用它。
val bar = foo
或
val (x, y) = foo
但是,如果我尝试更新如下所示的现有变量,则无法正常工作。
var x = 1.0
var y = 2.0
(x, y) = foo
这将返回一个错误,提示error: ';' expected but '=' found
这背后是否有任何原因。为什么我不能使用(x, y) = foo
答案 0 :(得分:3)
多次分配的语法实际上是模式匹配的一个示例。所以这个
val (x, y) = foo
...
相当于
foo match {
case (x, y) =>
...
这意味着您可以使用以下更高级的模式匹配语法:
val f @ (x, y) = foo
或这个
val (x, _) = foo
但是模式匹配只能用于将值提取到新变量中,而不能用于更新现有变量,这就是为什么最后一部分代码无法编译的原因。无论如何,Scala代码都倾向于避免使用var
,因此对于大多数程序而言,这并不是主要问题。