Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax 为什么我需要写(docstr)而不是(meta&x27;str)?_Syntax_Clojure_Macros - Fatal编程技术网

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中做了一些实验,在这里捕获: