Подтвердить что ты не робот

Scala эквивалент Python, возвращающий несколько элементов

В Python можно сделать что-то вроде этого:

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

i, j = blargh()

Есть ли что-то подобное в scala?

4b9b3361

Ответ 1

Вы можете вернуть кортеж:

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

Ответ 2

Я понимаю, что это старый вопрос, но есть другой способ добиться того же. Я не знаю, есть ли у него недостатки, но преимущество в том, что возвращаемые значения "названы", что делает код более понятным.

(проверено на 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
        }
    }
}