这个块的类型是什么:callback: => Unit?
我如何将它分配给Option?换句话说,如何更新以下代码,使其不存在任何编译错误?
var onEventCallback: Option[() => Unit] = None
def onEvent(callback: => Unit) {
onEventCallback = Some(callback) // HERE compilation error: Some[Unit] doesn't conform to Option[() => Unit]
}正常。我用Some(callback _) 而不是 Some(callback)**.来解决它。但为什么要这么做?**
发布于 2013-07-26 06:18:26
编译器需要知道您是否希望立即执行回调。WIthout假定下划线立即执行,并将结果分配给一些。WIth这个下划线,编译器知道它不应该执行回调来获得结果,但是应该把它当作传递给某个构造函数(或者更确切地说,apply()方法)的参数。
发布于 2013-07-26 06:22:11
但为什么要这么做?
有时,您可以将by-name参数看作没有参数的函数。实际上,它是编译器中继Function0阶段之后的erasure阶段。您可以使用-Xprint:erasure编译代码以查看以下内容:
def onEvent(callback: Function0): Unit = onEventCallback_=(new Some(callback))https://stackoverflow.com/questions/17873870
复制相似问题