如何在scala中将值重新分配给def

时间:2015-07-06 20:47:56

标签: scala parsing function

我正在编写一个解析器,其中包含以下函数:

    def lastop:(Either[RDD[(Int,Array[Float])], Float], Either[RDD[(Int,Array[Float])], Float]) => RDD[(Int,Array[Float])] = add

其中“添加”是执行添加的功能。然后我想在我的程序中使用它,如下面一行:

 terms.foreach(t =>
    t match { case nums ~ op => lastop = op; stack = reduce(stack ++ nums, op)}

我收到以下错误:

[error] /home/mahsa/calculator/temp/ScalaParser.scala:183: reassignment to val
[error]         t match { case nums ~ op => lastop = op; stack = reduce(stack ++ nums, op)}
[error]                                            ^

无法想出如何解决此错误!

1 个答案:

答案 0 :(得分:2)

您希望存储对要调用的函数的更改引用。如果要存储和重新分配某些内容,则意味着您需要var,而不是val或def。尝试声明lastop,如:

var lastop:(Either[RDD[(Int,Array[Float])], Float], Either[RDD[(Int,Array[Float])], Float]) => RDD[(Int,Array[Float])] = add

请注意,您仍然需要像函数一样调用lastop,因为检索var的值将返回一个函数。这是一个微妙但重要的区别。