我想通过名称传递一个函数,在它执行之前做一些事情。考虑以下示例:
class Runner {
def apply(procedure: => Unit) = {
println("running procedure")
procedure
}
}
new Runner()(println("procedure!")) // #1
new Runner(){println("procedure!")} // #2
调用 #1 和 #2 之间的唯一区别在于花括号。虽然第一个呼叫输出
running procedure
procedure!
正如预期的那样,仅在第二次通话中
procedure!
被打印。
似乎使用大括号时,过程不是按名称传递而是执行。为什么在这个例子中大括号和圆括号不能互换?