2011-12-20 42 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