来自我的另一个问题 有没有办法让构造函数工作的名称参数?我需要一种方法来提供一个在对象内按需/延迟/按名称执行的代码块,并且该代码块必须能够访问类方法,就好像该代码块是该类的一部分一样.
以下测试用例失败:
package test
class ByNameCons(code: => Unit) {
def exec() = {
println("pre-code")
code
println("post-code")
}
def meth() = println("method")
def exec2(code2: => Unit) = {
println("pre-code")
code2
println("post-code")
}
}
object ByNameCons {
def main(args: Array[String]): Unit = {
val tst = new ByNameCons {
println("foo")
meth() // knows meth() as code is part of ByNameCons
}
tst.exec() // ByName fails (executed right as constructor)
println("--------")
tst.exec2 { // ByName works
println("foo")
//meth() // does not know meth() as code is NOT part of ByNameCons
}
}
}
输出:
foo
method
pre-code
post-code
--------
pre-code
foo
post-code