我有以下scala代码。在这段代码中,我将(全局)字符串名称传递给函数,并希望根据第一个参数更改字符串,如下所示:
def retVal(x: (String,String), y: => String) = {if (x._1 != "") {y = x._1;x} else (y,x._2)}
但是当我运行此代码时,我收到以下错误:
y = x._1
^
reassignment to a val
如何修改代码,以便在调用此函数时获取全局字符串变量?
答案 0 :(得分:1)
默认情况下,函数参数在Scala中是不可变的。您不能将a值赋给函数参数。
在您的情况下,您尝试通过名称参数分配呼叫,这是不可能的。
同样变异是错误的,而是返回值并将其分配给新变量。
但是如果你想改变做这样的事情
object MutationBox {
var globalString = ""
def retVal(x: (String,String)) = {
if (x._1.nonEmpty) {
globalString = x._1
x
} else (globalString, x._2)
}
}