小编G S*_*ton的帖子

动态检索Clojure函数元数据

环境:Clojure 1.4

我试图从函数向量中动态提取函数元数据.

(defn #^{:tau-or-pi: :pi} funca "doc for func a" {:ans 42} [x] (* x x))
(defn #^{:tau-or-pi: :tau} funcb "doc for func b" {:ans 43} [x] (* x x x))

(def funcs [funca funcb])
Run Code Online (Sandbox Code Playgroud)

现在,检索REPL中的元数据(有点)是直截了当的:

user=>(:tau-or-pi (meta #'funca))
:pi

user=>(:ans (meta #'funca))
42

user=>(:tau-or-pi (meta #'funcb))
:tau

user=>(:ans (meta #'funcb))
43
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试做一个地图,让:ans,:tau-or-pi或基本:name从元数据,我得到异常:

user=>(map #(meta #'%) funcs)
CompilerException java.lang.RuntimeException: Unable to resolve var: p1__1637# in this context, compiling:(NO_SOURCE_PATH:1) 
Run Code Online (Sandbox Code Playgroud)

在做了一些搜索后,我从2009年的帖子中得到了以下想法(https://groups.google.com/forum/?fromgroups=#!topic/clojure/VyDM0YAzF4o):

user=>(map #(meta …
Run Code Online (Sandbox Code Playgroud)

metadata function clojure defn

8
推荐指数
1
解决办法
794
查看次数

标签 统计

clojure ×1

defn ×1

function ×1

metadata ×1