【发布时间】:2015-07-09 17:03:39
【问题描述】:
我正在编写一个解析器,试图计算包含浮点数和 RDD 的表达式的结果,我已经覆盖 + - / * 并且它工作正常。在一方面,我得到了著名的错误“重新分配给 val”,但无法弄清楚如何解决它。 部分代码如下:
def calc: Parser[Any]=rep(term2 ~ operator) ^^ {
//match a list of term~operator
case termss =>
var stack =List[Either[RDD[(Int,Array[Float])], Float]]()
var lastop:(Either[RDD[(Int,Array[Float])], Float], Either[RDD[(Int,Array[Float])], Float]) => RDD[(Int,Array[Float])] = add
termss.foreach(t =>
t match { case nums ~ op => {
if (nums=="/path1/test3D.xml")
nums=sv.getInlineArrayRDD()
lastop = op; stack = reduce(stack ++ nums, op)}}
)
stack.reduceRight((x, y) => lastop(y, x))
}
def term2: Parser[List[Any]] = rep(factor2)
def factor2: Parser[Any] = pathIdent | num | "(" ~> calc <~ ")"
def num: Parser[Float] = floatingPointNumber ^^ (_.toFloat)
我定义了 pathIdent 来解析路径。 这是错误:
[error] reassignment to val:
[error] nums=sv.getInlineArrayRDD()
[error] ^
我已将 term2、factor2 和 num 中的 def 更改为 var,尽管我知道这似乎不正确,但这是我想到的唯一要测试的东西,但它没有用。 它来自哪里?
【问题讨论】: