scala - 功能签名

时间:2014-11-26 09:29:49

标签: function scala

我想知道,这些是不同的:

object Something {
 def apply(op: => Unit) {}
}

和此:

object Something {
 def apply(op:() => Unit) {}
}

因为当我打电话给他们时,需要我写一下:

  • 在第一种情况下:Something { afunction() }
  • 在第二种情况下:Something { () => afunction() }

1 个答案:

答案 0 :(得分:1)

首先是parameter passed by name,第二个是带有0个参数的lambda表达式。意义上没有实际差异,两者都没有评估op直到它被调用,但第一个可能不太安全,因为你的函数的用户可能不知道它将被最近评估或根本没有评估。

所以,如果你期望传递参数内的一些副作用,比如Something({println(“aaa”); 5})并希望用户(可能不会看到签名而只是从某个例子中得到你的功能)要知道他的代码可能没有执行 - 最好使用Something(()=> {println(“aaa”); 5})

查看更多:

By-name parameter vs anonymous function

What's the difference between => , ()=>, and Unit=>