鉴于此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类来保存返回值,但是想要做一些这样的工作,因为它看起来更清晰。
答案 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
所以它有效,但很难看