2011-04-21 21 views

回答

6

在初始化变量时,您会看到模式匹配的限制版本。注意这不仅为元组:

val a :: b = List(1,2,3) 
println(a) //1 
println(b) //List(2, 3) 

这个功能似乎是直接从哈斯克尔,借来的地方可以使用的模式进行初始化,以及:

let (a,b) = getTuple 
in a*b 

由于Haskell有没有可变数据,没有办法分配一些东西。

在斯卡拉你可能做这样的事情,但我想这被认为太混乱,或者太难实施。像往常一样,您总是可以使用match表达式,并且通常只需要一个case,例如, List((1,2),(3,4)).map{ case (a,b) => a*b }

2

我怀疑,如果没有变量名称元组左侧的“var”或“val”,编译器会将该元组视为一个元组。也就是说,你真的试图给Tuple3的实例赋值,而不是给这三个变量赋值,这对编译器没有意义。

顺便说一句,在你的例子中使用函数和各种数据类型是不相关的。这里有一个更简单的例子:

scala> var (i, j, k) = (1, 2, 3) 
i: Int = 1 
j: Int = 2 
k: Int = 3 

scala> (i, j, k) = (4, 5, 6) 
<console>:1: error: ';' expected but '=' found. 
     (i, j, k) = (4, 5, 6) 
       ^