我的问题很简单,但同时又很奇怪,我想创建一个PersistentArrayMap避免同时求值,而我想在其中获取值。最好的解决方案是什么?我的意思是
想象一下我有这个定义:
(def queen "catherine the great")
并且想做这样的事情:
'{:queen queen}
确定输出是=> {:queen queen}
但是我希望做这样的事情=> {:queen "catherine the great"}
我知道我可以做到
(array-map :queen queen)
但是,在我的情况下,我只想评估一些信息,因为我的地图更加复杂,例如自动查询:
'{:find [(pull $ ?c [*])]
:with []
:in [$ ?queen-name]
:where [
[$ ?c :queen/name ?queen-name]
]
:args [queen-name]}
在这种情况下,我只想评估女王的名字。
我的问题是,有一种简单的方法吗?也许使用更新?
这样的东西?
(update '{:find [(pull $ ?c [*])]
:with []
:in [$ ?queen-name]
:where [
[$ ?c :queen/name ?queen-name]
]
:args []} :args ["catherine the great"])
对于两个示例,您都可以使用syntax-quote and unquote:
user=> (def queen-name "catherine the great")
#'user/queen-name
user=> `{:queen ~queen-name}
{:queen "catherine the great"}
user> `{:find [(pull $ ?c [*])]
:with []
:in [$ ?queen-name]
:where [
[$ ?c :queen/name ?queen-name]
]
:args [~queen-name]}
{:args ["catherine the great"],
:find [(user/pull user/$ user/?c [clojure.core/*])],
:where [[user/$ user/?c :queen/name user/?queen-name]],
:with [],
:in [user/$ user/?queen-name]}