从Java调用Clojure函数时,为函数指定命名参数的最佳方法是什么?
我有以下功能:
(defn myFn [a b & {:keys [c d] :or {c 1 d 2}}]
; do something
)
我目前用Java来调用它:
IFn myFn = Clojure.var("my.namespace", "myFn");
myFn.invoke(5, 6, Clojure.read(":c"), 7, Clojure.read(":d"), 8);
我发现上述陈述的Clojure.read...
部分详细。有没有更简单的方法来进行此次通话?
答案 0 :(得分:5)
问题不在于如何传递命名参数,而在于如何在Java代码中创建关键字:
import clojure.lang.Keyword;
// others omitted...
myFn.invoke(5, 6, Keyword.find("c"), 7, Keyword.find("d"), 8);
对于任务来说, Clojure.read
会被认为太麻烦,而且在任何代码中都会读得太危险。