Scala эквивалент Python, возвращающий несколько элементов
В Python можно сделать что-то вроде этого:
def blarg():
return "blargidy", "blarg"
i, j = blargh()
Есть ли что-то подобное в scala?
Ответ 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
}
}
}