无法向Symbol添加更新方法

时间:2012-06-21 19:51:24

标签: scala

我正在尝试向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

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

1 个答案:

答案 0 :(得分:5)

根据Scala Language Spec

  

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

如果您阅读Programming in Scala中的相应部分,那就特别清楚了:

  

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

我认为这意味着需要括号。