演習として、関数を受け入れて を生成する暗黙的な変換を作成しようとしましたRunnable
。そうすれば、Runnable
オブジェクトを受け入れる Java メソッドを呼び出して、それらをクロージャのように使用できます。
暗黙の変換は簡単です:
implicit def funToRunnable(fun : Unit) = new Runnable() { def run = fun }
しかし、私はそれを呼び出す方法がわかりません。一度に評価することなく、Unit を返す引数なしの関数をどのように渡しますか? たとえば、次のように「12」を出力したいのですprint("2")
が、一度に評価されるため、代わりに「21」を出力します。
var savedFun : Runnable = null
def save(r : Runnable) = { savedFun = r }
save(print("2"))
print("1")
savedFun.run()
print("2")
一度に評価されるものではなく、関数の本体として扱うようにコンパイラに指示するにはどうすればよいですか? 私が試したいくつかの可能性、
save(() => print("2"))
また
save(=> print("2"))
は正当な構文ではありません。