Syntax 元组参数声明和赋值异常

Syntax 元组参数声明和赋值异常,syntax,scala,tuples,Syntax,Scala,Tuples,我可以按如下方式分配元组: var (min, max) = (1, 2) 但我不能按如下方式重新分配 (min, max) = (1, 3) //compiler error: ';' expected but '=' found 相反,我似乎不得不这样做: min = 1 max = 3 为什么后者有效而前者无效?嗯,我想是因为它是这样规定的 这就是元组分配,是模式匹配的一个例子。模式匹配发生在我记得的三个地方: var PATTERN = ... // or val for (PA

我可以按如下方式分配元组:

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 => ...
var模式=…//或瓦尔
对于(模式。。。
因此,所有这些案例都有效:

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)
}
val l=List((1,'a'),(2,'b'),(3,'c'))
var(n,c)=l(0)
对于((n,c)println(n+“:”+c)
}
现在,以最后一个例子为例,即使用
case
的例子。请注意,该例子中的
n
c
与稍早定义的
n
c
不同。模式匹配将为新标识符
n
c
分配值,这将影响先前的定义f或者
case
语句的escope。同样的事情发生在
for
示例上,它没有改变先前定义的
n
c


现在,您想要做的是覆盖以前的值,而不是将新值分配给新的标识符。这不是模式匹配的工作方式,这意味着实现它需要一个全新的规则。因为Scala温和地促使人们实现不变性,我想他们没有创建一个新规则只是为了手我想这是因为它是这样设计的

这就是元组分配,是模式匹配的一个例子。模式匹配发生在我记得的三个地方:

var PATTERN = ... // or val

for (PATTERN <- ...) ...

case PATTERN => ...
var模式=…//或val
对于(模式。。。
因此,所有这些案例都有效:

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)
}
val l=List((1,'a'),(2,'b'),(3,'c'))
var(n,c)=l(0)
对于((n,c)println(n+“:”+c)
}
现在,以最后一个例子为例,即使用
case
的例子。请注意,该例子中的
n
c
与稍早定义的
n
c
不同。模式匹配将为新标识符
n
c
分配值,这将影响先前的定义f或者
case
语句的escope。同样的事情发生在
for
示例上,它没有改变先前定义的
n
c

现在,您想要做的是覆盖以前的值,而不是将新值分配给新的标识符。这不是模式匹配的工作方式,这意味着实现它需要一个全新的规则。因为Scala温和地促使人们实现不变性,我想他们没有创建一个新规则只是为了手别这样