Scala中的(),(Nothing)和_

时间:2016-12-16 02:49:20

标签: scala

我正在玩一些lambdas,其中writeflush的类型为Try[Unit]。我得到了不同的类型,具体取决于我传入lambdas的参数:

val writeLambda: (Nothing) => Try[Unit] = _ => write
val flushLambda: () => Try[Unit] = () => flush

如果lambda是_ => write,我的参数类型为(Nothing),但如果是(),我会得到()。有什么区别?

1 个答案:

答案 0 :(得分:2)

  

如果lambda是_ => write,我得到的参数类型为(Nothing)

不完全是。 _充当lambda表达式_ => write中的(通配符和忽略的)参数,因此它必须具有某种类型,当然它可以是您想要的任何类型 - 来自{{1} } Scala class hierarchy中的Any。省略类型将是“缺少参数类型”错误。

另一个lambda表达式Nothing中的空parantheses暗示它没有接受任何参数,这几乎就是返回类型() => flush所暗示的。

() => Try[Unit]

与Java相比,第一个是常规的Lambda表达式,而第二个表达式具有更具体的成语Supplier(如果愿意)。