次のコードでは暗黙の変換がprintln(2)
行に適用されます。私は愚かにブロック{ println(1); println(2) }
全体に適用することを期待していました。コンパイラが暗黙的に配置する場所について、どうすればよいですか?ブロックを使用した暗黙的変換の場所の選択
object Executor {
private var runnable: Runnable = _
def setRunnable(runnable: Runnable) {
this.runnable = runnable
}
def execute() { runnable.run() }
}
object Run extends App {
implicit def blockToRunnable(p: ⇒ Any): Runnable =
new Runnable { def run() = p }
Executor.setRunnable {
println(1)
println(2)
}
println("Before execute")
Executor.execute()
}
!私はそれが_neither_ステートメントに適用され、 'println(2)'の '()'(単位)戻り値だけをラップすることを期待していました。 2行目を名前で呼ぶようにしても、私にとっては直感にはなりません。 –