我有一个功能
(defn hi [a] '[a 2])
它应该取一个值 a 并将该值插入带引号的向量中,然后返回向量。
所以调用(hi :abc)
应该返回[:abc 2]
。
需要注意的重要一点是引用了内部向量。
我该怎么做呢?
我有一个功能
(defn hi [a] '[a 2])
它应该取一个值 a 并将该值插入带引号的向量中,然后返回向量。
所以调用(hi :abc)
应该返回[:abc 2]
。
需要注意的重要一点是引用了内部向量。
我该怎么做呢?
这可以帮助:
user=> (defn hi [a] [a '2])
#'user/hi
user=> (hi :abc)
[:abc 2]
如果我理解正确,您希望能够将未定义的符号传递给函数,并取回包含该符号的向量(添加了一些其他内容)。
如果您在将符号传递给函数之前引用它,那么您不必在函数内部执行任何特殊操作:
user=> (defn hi [a] [a 2])
user=> (= (hi '?ab) '[?ab 2])
true
如果您不想引用符号(例如,您正在制作 DSL 以启用惯用的 datomic 查询结构创作),那么您必须使用宏,因为评估函数将导致符号在命名空间。您可以尝试以下方法:
user=> (defmacro hi2 [a] `(quote [~a 2]))
user=> (= (hi2 ?ab) '[?ab 2])
true