1
是否可以在scala中一次分配兩個值?我的意思是這樣的代碼:在scala中分配兩個值
var a: Int = 0
var b: Int = 0
(a, b) = methodReturningTupleOfInts()
其中當然methodReturningTupleOfInts的返回(Int, Int)
是否可以在scala中一次分配兩個值?我的意思是這樣的代碼:在scala中分配兩個值
var a: Int = 0
var b: Int = 0
(a, b) = methodReturningTupleOfInts()
其中當然methodReturningTupleOfInts的返回(Int, Int)
當然,這是可能的值中。
能夠輕鬆做到這些事情是功能語言的賣點。
def myMethod(i:Int) = (i+1, i+2)
@Test
def testit() {
val (a,b) = myMethod(5)
Assert.assertEquals(a, 6)
Assert.assertEquals(b, 7)
}
請注意,我們使用了VAL以上。這裏發生的事實上是一個模式匹配來提取複合詞的組成部分。但是變量不可能。因此,而不是可以一次做幾個分配到變量。
因爲,更改值可能有副作用。這會造成很多複雜性,因爲執行這種匹配和分配的順序是相關的。因此,如果你真的需要一個變量,那麼你需要明確地提取元組的部件並將它們分配一個接一個
def myMethod(i:Int) = (i+1, i+2)
var (a,b) = (2,3)
@Test
def testit() {
Assert.assertEquals(a, 2)
Assert.assertEquals(b, 3)
val result = myMethod(5)
a = result._1
b = result._2
Assert.assertEquals(a, 6)
Assert.assertEquals(b, 7)
}
注意的元組化合物初始化(A,B)的作品,是OK。但不允許使用複合賦值來修改它。 (a,b) = myMethod(5)
不會編譯