0

これはかなり仮説的な質問ですが、スコープ内で+(または他の算術演算子)の動作を変更しIntたいとしましょう。一般的に、しかし私はそれが面白いと思います):

object MySillyStuff extends App {
  def +(a: Int, b: Int) = a*b;

  println(1+2)
}

それはこの方法で可能ですか、それとも新しい型での暗黙的な変換を通じてのみ演算子をオーバーロードできますか? (つまり、その新しい型のメンバーとして明示的に作成し、その特定の型1の暗黙的な変換を使用する必要があります)。2

4

1 に答える 1

4

scala には演算子がないことに注意してください。問題+の方法はInt:(1).+(2)です。

既存のメソッドをオーバーライドする唯一の方法は、overrideキーワードによる継承です。

Implicit クラスを使用すると、新しいメソッドを追加できますが、既に存在するメソッドをオーバーライドすることはできません。

次のような値クラスを使用して、オーバーヘッドなしでクラスをラップできます。

case class StrangeInt(val i: Int) extends AnyVal {
  def +(that: Int): StrangeInt = StrangeInt(i*that)
}

val i = StrangeInt(3)
println(i+3)
// StrangeInt(9)
于 2013-06-24T08:45:32.900 に答える