是否可以指定一个匿名函数的返回类型,在Scala呢?
-
21-09-2019 - |
题
我知道你可以创建一个匿名函数,并让编译器推断它的返回类型:
val x = () => { System.currentTimeMillis }
只是为了静态类型的缘故,是不是可以指定它的返回类型呢?我相信这会令事情变得更清晰。
解决方案
在我看来,如果你想使事情变得更加清晰最好是通过添加类型注释存在,而不是函数的结果是记录这个标识符x的期望。
val x: () => Long = () => System.currentTimeMillis
然后,编译器将确保在右手侧上的功能满足这种期望。
其他提示
val x = () => { System.currentTimeMillis } : Long
费边给了直截了当的方式,但如果你的一些其他的方法一样事无巨细糖包括:
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
}
,因为在大多数情况下,它都没有区别,如果它从功能下降时,只有它是否有一个适用。
不隶属于 StackOverflow