【发布时间】:2010-01-18 19:06:35
【问题描述】:
我知道你可以创建一个匿名函数,并让编译器推断它的返回类型:
val x = () => { System.currentTimeMillis }
仅仅为了静态类型,是否也可以指定它的返回类型?我认为这会让事情变得更清楚。
【问题讨论】:
标签: scala anonymous-function static-typing
我知道你可以创建一个匿名函数,并让编译器推断它的返回类型:
val x = () => { System.currentTimeMillis }
仅仅为了静态类型,是否也可以指定它的返回类型?我认为这会让事情变得更清楚。
【问题讨论】:
标签: scala anonymous-function static-typing
val x = () => { System.currentTimeMillis } : Long
【讨论】:
val x = () => Long = {blah} 会是一种更直观的语法。感谢您的回答!
Fabian 给出了直接的方法,但如果您喜欢对糖进行微观管理,其他方法包括:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
或
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
甚至
val x = new {
def apply(): Long = System.currentTimeMillis
}
因为在大多数情况下,如果它来自 Function 没有区别,只是它是否有一个 apply。
【讨论】:
在我看来,如果您想让事情更清楚,最好通过在其中添加类型注释而不是函数的结果来记录对标识符 x 的期望。
val x: () => Long = () => System.currentTimeMillis
然后编译器将确保右侧的函数满足该期望。
【讨论】:
val x = () => { System.currentTimeMillis } : String 无法编译。还是你的意思是别的?
(),当函数 () => System.currentTimeMillis 分配给 x 时会检查它。跨度>
Function0[Long],虽然我通常更喜欢显示的符号。