以下の内容はhttps://unageanu.hatenablog.com/entry/20080711/1215789219より取得しました。


Prefix Operations

クラスやTraitに、

def unary_<演算子(- or + or ! or ~)> = ...

のようなメソッドを定義しておくと、

<演算子> <レシーバ>

の形式でメソッドを呼び出すことができます。

// テスト用クラス
class Foo( value:Int ) {

  override def toString = value.toString
  
  // unary_<演算子> で 「<演算子> <レシーバ>」で実行できる関数を定義できる。
  def unary_- = new Foo( value-1 )
  def unary_+ = new Foo( value+1 )
}


var foo = new Foo(10)
println(foo)

// 「<演算子> <レシーバ>」で関数を実行。
println( + foo )
println( - foo )

実行結果です。

10
11
9

if文とかで使う「&&」とか「||」がBooleanのメソッドであるのと同じで、否定も「オブジェクトのメソッド」として実現されているわけですね。ふむ。




以上の内容はhttps://unageanu.hatenablog.com/entry/20080711/1215789219より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14