Scala从函数中分配多个返回值

时间:2014-05-10 18:31:15

标签: scala

鉴于此Scala功能

def mv: (Int,Int,Int) = {
  (1,2,3)
}

以下作品

val (i,j,k) = mv

但这不是

var i = 0
var j = 0
var k = 0
(i,j,k) = mv
<console>:1: error: ';' expected but '=' found.
   (i,j,k) = mv
           ^

这意味着分配多个变量仅在初始化时有效?或者我写错了?试图找到一种方法从函数返回多个值并将值分配给类中的实例变量,这意味着在调用函数时不能初始化变量,因为它们是在所有方法之外声明的。

class C {
  var i = 0
  var j = 0
  var k = 0
  def mv: (Int,Int,Int) = {
    (1,2,3)
  }
  def changeState: Unit = {
    (i,j,k) = mv
  }
}

以上不起作用。我可以创建一个case类来保存返回值,但是想要做一些这样的工作,因为它看起来更清晰。

1 个答案:

答案 0 :(得分:1)

我找到了一种方法让它发挥作用,但似乎有点不对劲:

class C {
  var i = 0
  var j = 0
  var k = 0
  def mv: (Int,Int,Int) = {
    (1,2,3)
  }
  def changeState: Unit = {
    val (x,y,z) = mv
    i = x
    j = y
    k = z
  }
}

val c = new C
c.i == 0 //true
c.changeState
c.i == 1 //true so this works

所以它有效,但很难看