Scala等价于Python返回多个项



在Python中可以这样做:

def blarg():
    return "blargidy", "blarg"
i, j = blargh()

在scala中是否有类似的功能?

可以返回一个元组:

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

我知道这是一个老问题,但是有另一种方法可以达到同样的效果。我不知道它是否有任何缺点,但优点是返回的值是"命名的",使代码更加自解释。

(在scala 2.11上测试)

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
        }
    }
}

最新更新