首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将`=>单位`转换为`() =>单位‘

将`=>单位`转换为`() =>单位‘
EN

Stack Overflow用户
提问于 2013-07-26 05:51:17
回答 2查看 169关注 0票数 1

这个块的类型是什么:callback: => Unit

我如何将它分配给Option?换句话说,如何更新以下代码,使其不存在任何编译错误?

代码语言:javascript
复制
  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)**.来解决它。但为什么要这么做?**

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-26 06:18:26

编译器需要知道您是否希望立即执行回调。WIthout假定下划线立即执行,并将结果分配给一些。WIth这个下划线,编译器知道它不应该执行回调来获得结果,但是应该把它当作传递给某个构造函数(或者更确切地说,apply()方法)的参数。

票数 4
EN

Stack Overflow用户

发布于 2013-07-26 06:22:11

但为什么要这么做?

有时,您可以将by-name参数看作没有参数的函数。实际上,它是编译器中继Function0阶段之后的erasure阶段。您可以使用-Xprint:erasure编译代码以查看以下内容:

代码语言:javascript
复制
def onEvent(callback: Function0): Unit = onEventCallback_=(new Some(callback))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17873870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档