鑑於以下功能 -如何編寫一個宏來添加元數據功能
(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! –