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

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

By-Name ParametersでJavaライクなsynchronizedを作る

「By-Name Parameters」を使うと、

foo { println("aaaa") }

みたいな感じで呼び出せる関数を作成できます。関数fooの定義は以下のような感じ。

def foo[R]( proc: => R ):R = {
  try {
    println("before...")
    proc // 引数のprocを評価して実行
  } finally {
    println("after...")
  }
}

実行結果です。

before...
aaaa
after...

これを使って、Javaライクなsynchronized関数を作ってみました。(まぁ、特にメリットはないんですけど。)

def synchronized[R]( obj:AnyRef )( proc: => R ):R = {
  obj.synchronized { proc }
}

次のような感じで呼び出せます。

val obj = new java.lang.Object
synchronized( obj ) {
  println("aaaa") 
}