我想知道,这些是不同的:
object Something {
def apply(op: => Unit) {}
}
和此:
object Something {
def apply(op:() => Unit) {}
}
因为当我打电话给他们时,需要我写一下:
Something { afunction() }
Something { () => afunction() }
答案 0 :(得分:1)
首先是parameter passed by name,第二个是带有0个参数的lambda表达式。意义上没有实际差异,两者都没有评估op
直到它被调用,但第一个可能不太安全,因为你的函数的用户可能不知道它将被最近评估或根本没有评估。
所以,如果你期望传递参数内的一些副作用,比如Something({println(“aaa”); 5})并希望用户(可能不会看到签名而只是从某个例子中得到你的功能)要知道他的代码可能没有执行 - 最好使用Something(()=> {println(“aaa”); 5})
查看更多: