java - 从 Java 使用命名/默认参数调用 Clojure 函数的最佳方法

标签 java clojure

从 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/

相关文章:

java - Parse.com REST API 错误代码 400 : Bad Request from Java HTTP Request to Cloud Function

java - 如何考虑MVC模式下的 "loader class"?

java - 在比较器中处理 IOException 的正确方法是什么?

java - 使用 Java API 制作 ePub

http - 懒惰地消费http请求

clojure - 为什么 eval 是邪恶的?

clojure - 无法取消关联矢量项?陷入循环

java - Xml 到 JSON 单值数组处理

clojure carmine redis 连接错误

JQuery 的 Promise() 和 ClojureScript