【问题标题】:scala - Function signatures [duplicate]scala - 函数签名[重复]
【发布时间】:2014-11-26 09:29:49
【问题描述】:

我想知道,这些有什么区别:

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

还有这个:

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

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

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

【问题讨论】:

    标签: function scala


    【解决方案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=>

    【讨论】:

    • 感谢您的解释,特别是链接。
    猜你喜欢
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多