为什么我需要写(doc str)但是(meta#'str)?

时间:2012-08-22 03:39:57

标签: syntax clojure macros

为什么(doc str)(meta #'str)

在后者中,为什么#'是必要的,哪个不在第一个?

2 个答案:

答案 0 :(得分:5)

doc是一个宏,它在内部将#',即var应用于传递的名称,因此您不需要将var本身传递给它。 meta是一个函数,因此它需要传递var本身,否则如果只使用var的名称(如在doc中所做的那样),var的值将被传递给它

答案 1 :(得分:0)

#'是读者宏,#'str扩展为(var str),返回Var对象,请参阅doc:

user> (doc meta)
-------------------------
clojure.core/meta
([obj])
  Returns the metadata of obj, returns nil if there is no metadata.