Clojure具有declare宏,可用于向前声明函数或变量。似乎功能与def完全相同:(declare x)(def x)都创建#<Unbound Unbound: #'user/x>
什么时候应该使用(declare x)代替(def x)

最佳答案

declaredef都可以创建一个未绑定(bind)的var,但是使用declare有3个优点:

  • 您可以在一个语句中创建多个var,例如(declare x y z)
  • var用附加的元数据{:declared true}
  • 标记
  • 使用declare这个词可以说是更清晰和惯用的

  • (source declare):
    (defmacro declare
      "defs the supplied var names with no bindings, useful for making forward declarations."
      {:added "1.0"}
      [& names] `(do ~@(map #(list 'def (vary-meta % assoc :declared true)) names)))
    

    关于clojure - `def`与`declare`进行前向声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33855736/

    10-12 13:41