2013-11-22 59 views
1

是否可以在scala中一次分配兩個值?我的意思是這樣的代碼:在scala中分配兩個值

var a: Int = 0 
var b: Int = 0 

(a, b) = methodReturningTupleOfInts() 

其中當然methodReturningTupleOfInts的返回(Int, Int)

回答

1

當然,這是可能的中。

能夠輕鬆做到這些事情是功能語言的賣點。

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)不會編譯