Wenn die Lambda-_ => write
ist, erhalte ich einen Parametertyp von (Nothing)
Nicht ganz. _
fungiert als (Platzhalter und ignorierte) Parameter im Lambda-Ausdruck _ => write
, also muss es einen Typ haben, und natürlich kann es sein, was auch immer Sie wollen - von Any
bis Nothing
in der Scala class hierarchy. Wenn Sie den Typ auslassen, wird der Fehler "Fehlender Parametertyp" angezeigt.
Die leeren Klammern in dem anderen Lambda-Ausdruck () => flush
implizieren, dass es keine Parameter übernimmt, was ziemlich genau das ist, was der Rückgabetyp () => Try[Unit]
impliziert.
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"))
}
zu Java Ein Vergleich, der erste wäre eine regelmäßige Lambda-Ausdruck sein, wo, wie der zweite eine spezifischere Idiom Supplier (wenn man so will) genannt hat.