我正在玩一些lambdas,其中write
和flush
的类型为Try[Unit]
。我得到了不同的类型,具体取决于我传入lambdas的参数:
val writeLambda: (Nothing) => Try[Unit] = _ => write
val flushLambda: () => Try[Unit] = () => flush
如果lambda是_ => write
,我的参数类型为(Nothing)
,但如果是()
,我会得到()
。有什么区别?
答案 0 :(得分:2)
如果lambda是
_ => write
,我得到的参数类型为(Nothing)
不完全是。 _
充当lambda表达式_ => write
中的(通配符和忽略的)参数,因此它必须具有某种类型,当然它可以是您想要的任何类型 - 来自{{1} } Scala class hierarchy中的Any
。省略类型将是“缺少参数类型”错误。
另一个lambda表达式Nothing
中的空parantheses暗示它没有接受任何参数,这几乎就是返回类型() => flush
所暗示的。
() => Try[Unit]
与Java相比,第一个是常规的Lambda表达式,而第二个表达式具有更具体的成语Supplier(如果愿意)。