ラムダが_ => write
であれば、私は(Nothing)
正確
ないのパラメータの型を取得します。 _
は、ラムダ式_ => write
の(ワイルドカードと無視された)パラメータとして機能するので、何らかの型を持たなければなりません。そして、Any
〜Nothing
からScala class hierarchyまでの任意の型にすることができます。タイプを省略すると、「欠落しているパラメータタイプ」のエラーになります。
他のラムダ式() => flush
の空の括弧は、パラメータを取っていないことを意味しています。これは戻り値の型() => Try[Unit]
の意味です。 Javaへの比較
import scala.util.Try
object TestObject {
def main(args: Array[String]): Unit = {
val writeLambda: (Any => Try[Unit]) = { _ => write }
val flushLambda: (() => Try[Unit]) = {() => flush }
writeLambda(Map("one" -> Option(BigDecimal(1)))) // prints "write"
writeLambda(List(1, 2, 3)) // prints "write"
writeLambda(None) // prints "write"
writeLambda(1) // prints "write"
writeLambda() // prints "write"
flushLambda() // prints "flush"
flushLambda(None) // won't compile because "Too many arguments"
}
def write: Try[Unit] = Try(println("write"))
def flush: Try[Unit] = Try(println("flush"))
}
、最初のものは、第1のSupplierと呼ばれる、より具体的なイディオム(あなたがするかどうかを)持っているとして、正規ラムダ式になります。