当我只有一个名字时,我如何运行功能?

时间:2016-05-28 20:18:11

标签: clojure

实施例。我们有很容易的功能。

(defn func1 []
  (println "i'm func1"))

(defn func2 []
  (println "i'm func2"))

我创建了包含此函数名称的列表。

(def listOfFunc '(func1 func2))

当我从列表中获取函数名称时,如何运行此函数?

对不起我的英语不好和非常棒的问题。

1 个答案:

答案 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应替换为具有您的函数的命名空间。