实施例。我们有很容易的功能。
(defn func1 []
(println "i'm func1"))
(defn func2 []
(println "i'm func2"))
我创建了包含此函数名称的列表。
(def listOfFunc '(func1 func2))
当我从列表中获取函数名称时,如何运行此函数?
对不起我的英语不好和非常棒的问题。
答案 0 :(得分:3)
这些函数存储在列表中的具体原因是什么?
如果不是,那么你可以使用一个矢量,它会产生这样的结果:
(def fns [func1 func2])
(map #(%) fns)
请注意,这将导致两个nils的惰性seq:(nil nil)
。但是,如果您的功能仅用于副作用,就像您列出的那样,那么您可以将它们包装成dorun:
(dorun (map #(%) fns))
将返回单个nil
。
现在,如果您仍然喜欢使用列表,则必须将符号解析为相应的函数。所以我猜这样的事情会奏效:
(map #((ns-resolve 'foo.core %)) listOfFunc)
其中'foo.core
应替换为具有您的函数的命名空间。