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


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") 
}



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

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