3

我正在尝试向 Symbol 类添加一个更新方法。

class SymbolUpdate(s: Symbol) {
    def update(i: Int) = s.name + i
}
implicit def toSymbolUpdate(s: Symbol) = new SymbolUpdate(s)

但是当我运行代码时,我得到以下

scala> 's = 1
<console>:327: error: value update is not a member of object Symbol
              's = 1
              ^

但是当我直接调用该方法时它确实有效。

scala> 's.update(1)
res41: java.lang.String = s1

或者,如果我明确放置一个空参数数组。

scala> 's() = 1
res42: java.lang.String = s1

不确定我的代码有什么问题?

4

1 回答 1

5

根据Scala 语言规范

f(args) = e'=' 运算符左侧的函数应用程序的赋值被解释为f.update(args, e),即调用由update定义的函数f

如果您阅读Scala 编程中的相应部分,则尤其清楚:

类似地,当对已应用括号和一个或多个参数的变量进行赋值时,编译器会将其转换为更新方法的调用,该方法采用括号中的参数以及右侧的对象等号。

总之,我认为括号是必需的。

于 2012-06-21T20:40:56.273 回答