Scala中返回多个项的等效Python方式

21 投票
2 回答
7716 浏览
提问于 2025-04-17 08:43

在Python中,可以做类似这样的事情:

def blarg():
    return "blargidy", "blarg"

i, j = blargh()

在Scala中有没有类似的功能呢?

2 个回答

6

我知道这个问题已经很老了,但还有另一种方法可以实现相同的效果。我不太清楚这样做是否有缺点,但好处是返回的值是“命名的”,这样代码看起来更容易理解。

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

撰写回答