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)の呼び出しです。updatef

Scalaでのプログラミングの対応するセクションを読んだ場合は特に明らかです:

同様に、括弧と1つ以上の引数が適用された変数に割り当てが行われると、コンパイラはそれを、括弧内の引数とその右側のオブジェクトを受け取る更新メソッドの呼び出しに変換します。等号。

一緒に、私は括弧が必要であることを意味すると解釈します。

于 2012-06-21T20:40:56.273 に答える