通过Name Scala传递函数参数

时间:2016-10-18 10:52:51

标签: scala

我有以下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

如何修改代码,以便在调用此函数时获取全局字符串变量?

1 个答案:

答案 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)
 }

}