从 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...
部分冗长。有没有更简单的方法来进行此调用?
最佳答案
问题不在于如何传递命名参数,而在于如何在 Java 代码中创建关键字:
import clojure.lang.Keyword;
// others omitted...
myFn.invoke(5, 6, Keyword.find("c"), 7, Keyword.find("d"), 8);
Clojure.read
会被认为对于任务而言太麻烦,而且太危险,因为它可以读取任何代码。
关于java - 从 Java 使用命名/默认参数调用 Clojure 函数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33069889/