다음 코드에서 암시 적 변환은 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)'의'()'(단위) 반환 값만 감싸기를 기대했을 것입니다. 두 번째 전화를 이름으로 부르는 것이 나를 매우 비 직관적으로 만든다. –