使用Java中的named/default args调用Clojure函数的最佳方法

Jas*_*son 3 java clojure

从Java调用Clojure函数时,为函数指定命名参数的最佳方法是什么?

我有以下功能:

(defn myFn [a b & {:keys [c d] :or {c 1 d 2}}]
   ; do something
   )
Run Code Online (Sandbox Code Playgroud)

我目前用Java来调用它,如下所示:

IFn myFn = Clojure.var("my.namespace", "myFn");
myFn.invoke(5, 6, Clojure.read(":c"), 7, Clojure.read(":d"), 8);
Run Code Online (Sandbox Code Playgroud)

我发现Clojure.read...上述陈述的部分冗长.是否有更简单的方式来拨打电话?

Dav*_*zhu 5

问题不是如何传递命名参数,而是如何在Java代码中创建关键字:

import clojure.lang.Keyword;
// others omitted...
myFn.invoke(5, 6, Keyword.find("c"), 7, Keyword.find("d"), 8);
Run Code Online (Sandbox Code Playgroud)

Clojure.read 对于任务而言,这将被认为太麻烦,而且在任何代码中都可以读取太危险.