読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

演算子とメソッド

Scala

昨日書いたオブジェクトのメソッド呼び出しを「<オブジェクト名> <関数名> <引数>」で実行できる件について、みずしまさんよりコメントを頂いた(ありがとうございます!)ので、仕様書を確認。
どうも、メソッド呼び出しと演算子がまったく別物という認識がそもそも間違っていたようだ。Scalaではクラスの演算子メソッドとして定義するのと同じノリで、メソッド演算子のように利用することができると理解して納得。

// 「+」演算子をオーバーライドしたクラス。
class Foo(i:Int) {
  def +(j:Int):Int = i+j 
  def plus(j:Int):Int = i+j
}

// 「+」メソッドを演算子として使えるのと同様に
// 普通のメソッド「plus」も演算子的に使うことができる。
var foo = new Foo(3)
println( foo + 3 )    // 6
println( foo plus 3 ) // 6

// ただし、優先順位(*や/は+,-より優先的に評価される)は決まっているので注意。
println( foo +    3 << 2 ) // (foo + 3) << 2     = 24
println( foo plus 3 << 2 ) // foo plus ( 3 << 2) = 15

なお、結合の優先順位は決まっている。この辺はThe Scala Language Specification - 6.12.3 Infix Operationsで定義されているのでそちらを参照。