Anonyme Funktionen mit Clojure
In Clojure kann man anonyme Funktionen mit der Shortcut Syntax #()
schreiben.
Das scheint aber nicht mehr zu funktionieren, wenn man Funktionen als Argumente übergibt und diese dann wiederum mit der kurzen Syntax aufruft.
user=>
user=> (let
#_=> [say-hello #(println (str "Hello, " %1))
#_=> say-bye #(println (str "Good bye, " %1))
#_=> greeting #((%1 %2))]
#_=> (greeting say-bye "Jens"))
Good bye, Jens
Execution error (NullPointerException) at user/eval2108$greeting (REPL:4).
null
Abhilfe schafft die Verwendung von apply
:
user=>
user=> (let
#_=> [say-hello #(println (str "Hello, " %1))
#_=> say-bye #(println (str "Good bye, " %1))
#_=> greeting #(apply %1 %2)]
#_=> (greeting say-bye '("Jens")))
Good bye, Jens
nil