【问题标题】:Why do I need to write (doc str) but (meta #'str)?为什么我需要写(doc str)但是(meta #'str)?
【发布时间】:2012-08-22 03:39:56
【问题描述】:

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

在后一个中,为什么#' 是必需的,而第一个中没有?

【问题讨论】:

    标签: syntax clojure macros


    【解决方案1】:

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

    【讨论】:

    • 我想更好地理解你的答案,所以我在 REPL 中做了一些实验,捕获在这里:gist.github.com/3422860
    【解决方案2】:

    #'是reader宏,#'str展开为(var str),返回Var对象,见doc:

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

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2016-10-22
      • 2018-12-31
      • 2020-08-25
      相关资源
      最近更新 更多