2011-12-20 48 views

回答

31

您可以返回一個元組:

def blarg = ("blargidy", "blarg") 

val (i, j) = blarg 

注意事項並聯可變分配模式匹配語法:這適用於任何模式,不僅爲元組。例如:

val list = 1 :: 2 :: 3 :: Nil 

val x :: y = list // x = 1 and y = 2 :: 3 :: Nil 
+0

真棒,謝謝(斯卡拉上測試2.11)! – dave 2011-12-20 19:10:05

+3

這實際上和Python中的工作方式一樣。 – 2011-12-20 19:40:00

+1

@KarlKnechtel,僅當返回的元素數量與變量數量匹配時。否則,你會得到「解包太多的值」這個錯誤,這是你在第二個例子中得到的Python。 – dave 2011-12-20 20:03:35

6

我意識到這是一個老問題,但還有另一種方法可以實現。我不知道它是否有任何缺點,但優點是返回的值是「命名的」,使得代碼更加自明。

package test.scala.misc 

object TestReturnMultipleNamedValues extends App { 

    val s = getMultipleNamedValues 

    println(s"changed=${s.dsChanged} level=${s.dsLevel}") 

    /** Returns an anonymous structure with named members. 
    * */ 
    def getMultipleNamedValues() : {val dsChanged : Boolean;val dsLevel : Int} = { 
     new { 
      val dsChanged = true 
      val dsLevel = 1 
     } 
    } 
} 
+1

或者使用case類,以便模式匹配工作 – 2015-07-27 15:15:27