为什么
var a,b,c = (0,0,0)
允许但不允许:
var a,b,c = (0,0,0)
(a,b,c) = (0,0,0) <<< fails to compile
a,b,c = (0,0,0) <<< fails to compile
答案 0 :(得分:3)
你可能意味着
var (a,b,c) = (0,0,0)
因为你写的是多重赋值,而不是模式匹配。
原因只是风格。 Scala倾向于使用不可变值,但允许您使用可变值。 Scala - 不仅在这里 - 非常简便,可以帮助您处理可变值。
您可以使用模式匹配初始化变量应该被视为该上下文中的祝福!
答案 1 :(得分:1)
您正在寻找the intupolator.
var a, b, c = 0
def pairing: Product = (11, 12)
*(a, b) = pairing
答案 2 :(得分:1)
(0,0,0)
是Tuple3
scala> var a,b,c = (0,0,0)
a: (Int, Int, Int) = (0,0,0)
b: (Int, Int, Int) = (0,0,0)
c: (Int, Int, Int) = (0,0,0)
每个变量a
,b
,c
都会受到元组的影响
相反,当你这样做时
scala> var (a,b,c) = (0,0,0)
a: Int = 0
b: Int = 0
c: Int = 0
a
,b
,c
很简单Int
,Scala使用Tuple3
的提取器方法来解构对象。
答案 3 :(得分:0)
您可以在不使用val
或var
的情况下引入绑定的唯一方法是进行理解或模式匹配。正如Rex所示,你要去的形式是val (a, b, c) = (0, 1, 2)
。这被称为“无可辩驳的模式匹配”,因为没有适应右侧和val
之后的模式之间的错误匹配。它不仅限于TupleN
。 E.g:
case class CC1(i: Int, d: Double, s: String)
val CC1(j, e, t) = CC1(1, 2.0, "three")
j: Int = 1
e: Double = 2.0
t: String = three