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温和地促使人们实现不变性,我想他们没有创建一个新规则只是为了手别这样