Syntax 为什么我需要写(docstr)而不是(meta&x27;str)?
为什么Syntax 为什么我需要写(docstr)而不是(meta&x27;str)?,syntax,clojure,macros,Syntax,Clojure,Macros,为什么(doc str)但是(meta#'str) 在后一种情况下,为什么第一种情况下不需要#'呢?#'是读卡器宏,#'str展开为(var str),返回var对象,请参见文档: user> (doc meta) ------------------------- clojure.core/meta ([obj]) Returns the metadata of obj, returns nil if there is no metadata. doc是一个宏,它在内部将#即var
(doc str)
但是(meta#'str)
在后一种情况下,为什么第一种情况下不需要#'
呢?#'
是读卡器宏,#'str展开为(var str),返回var对象,请参见文档:
user> (doc meta)
-------------------------
clojure.core/meta
([obj])
Returns the metadata of obj, returns nil if there is no metadata.
doc
是一个宏,它在内部将#
即var
应用于传递的名称,因此不需要将var本身传递给它meta
是一个函数,因此它需要传递var本身,否则,如果您只使用var的名称(如doc
中所述)我想更好地理解您的答案,所以我在REPL中做了一些实验,在这里捕获: