鉴于以下功能 -
(defn ^:export hi [] (+ 2 3))
Run Code Online (Sandbox Code Playgroud)
我想写一个宏来执行此操作 -
(defex hi [] (+ 2 3))
Run Code Online (Sandbox Code Playgroud)
该宏defex只是在函数前面添加 ^:export 元数据。我怎么做?
编辑 - 我检查了 repl (meta hi) 上的函数,它给出了 nil。所以很可能我不想添加元数据,而是以上述方式定义一个函数。
谢谢,穆尔塔扎
你不希望函数本身有元,你希望它在 var 上(或者任何 clojurescript 的等价物):
user> (defmacro defex [name & defn-args]
`(defn ~(vary-meta name assoc :export true) ~@defn-args))
#'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"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |