Scala 向符号添加更新方法时遇到问题

Scala 向符号添加更新方法时遇到问题,scala,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 ob

我正在尝试向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() = 1
res42: java.lang.String = s1
不确定我的代码有什么问题?

根据:

如果赋值
f(args)=e
且函数应用程序位于“=”运算符的左侧,则该赋值被解释为
f.update(args,e)
,即调用
update
函数 由
f
定义

如果您阅读以下内容中的相应部分,就会特别清楚:

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


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

我的印象是,单个参数apply方法仍然需要显式的空参数列表。我花了一些时间在互联网上搜索反例,但没有用。你确定你所要求的是有效的吗?(失败的不是隐式的,因为如果没有空的arg列表,2.9.1中SymbolUpdate的显式实例化也无法更新)。我真的很好奇您在这里想要实现什么。通常,
update
用于修改可变容器,例如
Array
。这里,
update
不修改任何内容,只返回一个
字符串
。我正在创建一个DSL,其中有赋值的“变量”,这将创建此类活动的模型。在这种情况下,设计了一个符号来表示DSL中的变量。这个例子并不代表我的用途。只是需要它做点什么来说明我的问题。是的,可悲的是,这也是我的解释。我正在尝试做一个DSL,额外的括号从可用性的角度来看会有所减损。在您的DSL中,您可以定义一个看起来非常像equals的新操作符
implicit def addColonEquals(s:Symbol)=new{def:=(i:Int)=s.name+i}
。是的,这可能是我要走的路线。谢谢你的建议!
scala> 's() = 1
res42: java.lang.String = s1