1

在我的 Clojure 代码中,我想在循环中使用 Java 对象的副作用方法。我的意图是将 Java 对象的多个参数设置为我存储在地图中的值:

(def params {
             :param1 "value1"
             :param2 "value2"
             })

如果我直接设置param1"value1"它工作正常:

(.setParam object (str :param1) "value1")

但是,如果我想通过 using 遍历params强制求值的地图doseq,Java 对象保持不变:

(doseq [[param value] params] (.setParam object (str param) value))

如何遍历params地图并使用副作用setParam方法使Javaobject发生变异?

我相信这可能是一个初学者错误,对于更有经验的 Clojure 用户来说很容易解决。

4

2 回答 2

3

调用str关键字会在结果中包含冒号。请尝试name

(doseq [[param value] params] (.setParam object (name param) value))
于 2013-09-16T18:44:29.477 回答
1

它应该工作,我认为你做错了什么。

user=> (def m (java.util.HashMap.))
#'user/m
user=> (doseq [[p v] params] (.put m p v))
nil
user=> m
{:param2 "value2", :param1 "value1"}
于 2013-09-16T18:33:33.780 回答