鉴于以下功能 -如何编写一个宏来添加元数据功能
(defn ^:export hi [] (+ 2 3))
我想编写一个宏,这是否 -
(defex hi [] (+ 2 3))
宏defex
只是增加^:在函数前面导出元数据。我怎么做?
编辑 - 我检查了repl(meta hi)的函数,它给出了零。所以最可能我不想添加metedata,但以上述方式定义一个函数。
感谢, 穆尔塔扎
鉴于以下功能 -如何编写一个宏来添加元数据功能
(defn ^:export hi [] (+ 2 3))
我想编写一个宏,这是否 -
(defex hi [] (+ 2 3))
宏defex
只是增加^:在函数前面导出元数据。我怎么做?
编辑 - 我检查了repl(meta hi)的函数,它给出了零。所以最可能我不想添加metedata,但以上述方式定义一个函数。
感谢, 穆尔塔扎
你不想在功能上的元本身,你想要它的变种(或任何clojurescript的相当于那是):
user> (defmacro defex [name & defn-args]
`(defn ~(vary-meta name assoc :export true) [email protected]))
#'user/defex
user> (defex hi [] "hi")
#'user/hi
user> (meta #'hi)
{:arglists ([]), :ns #<Namespace user>, :name hi, :export true, :line 1, :file "NO_SOURCE_FILE"}
您可以使用基本的模板,宏,建立一个功能,并使用高清将其保存在一个VAR
user> (defmacro defex [name args & body] `(def ~name ^{:export true} (fn ~args [email protected])))
#'user/defex
user> (defex hi [] (+ 2 3))
#'user/hi
user> (meta hi)
{:export true}
user>
请检查我的编辑。 – murtaza52
不同的meta在这里是正确的答案,谢谢amalloy +1! –