如何在带引号的向量中插入值

时间:2013-01-04 10:04:53

标签: clojure

我有一个功能

(defn hi [a] '[a 2])

应该取值a并将值插入带引号的向量中,然后返回向量。

所以调用(hi :abc)应该返回[:abc 2]
要注意的重要一点是引用了内部向量。
我该怎么做?

2 个答案:

答案 0 :(得分:1)

这可以提供帮助:

user=> (defn hi [a] [a '2])
#'user/hi
user=> (hi :abc)
[:abc 2]

答案 1 :(得分:0)

如果我理解正确,您希望能够将未定义的符号传递给该函数,并返回包含该符号的向量(添加了一些其他内容)。

如果在将符号传递给函数之前引用该符号,则不必在函数内部执行任何特殊操作:

user=> (defn hi [a] [a 2])
user=> (= (hi '?ab) '[?ab 2])
true

如果您不想引用符号(例如,您正在制作DSL以启用数据组查询结构的惯用创作),则必须使用宏,因为评估函数将导致符号为在命名空间中解析。你可以尝试类似的东西:

user=> (defmacro hi2 [a] `(quote [~a 2]))
user=> (= (hi2 ?ab) '[?ab 2])
true