注意:这是一个理论问题,我并不是试图解决任何问题,也不是试图达到任何实际效果
在 Scala 中创建 lambda 时使用(arguments)=>expression
语法,可以显式提供返回类型吗?
Lambda 与方法没有什么不同,它们都被指定为表达式,但据我了解,方法的返回类型可以轻松定义为def name(arguments): return type = expression
syntax.
考虑这个(说明性的)例子:
def sequence(start: Int, next: Int=>Int): ()=>Int = {
var x: Int = start
//How can I denote that this function should return an integer?
() => {
var result: Int = x
x = next(x)
result
}
}
您始终可以通过附加来声明表达式的类型:
和类型。因此,例如:
((x: Int) => x.toString): (Int => String)
例如,如果您有一个大而复杂的表达式并且您不想依赖类型推断来直接获取类型,那么这非常有用。
{
if (foo(y)) x => Some(bar(x))
else x => None
}: (Int => Option[Bar])
// Without type ascription, need (x: Int)
但如果将结果分配给具有指定类型的临时变量,可能会更清楚:
val fn: Int => Option[Bar] = {
if (foo(y)) x => Some(bar(x))
else _ => None
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)