【问题标题】:How to load-string to current namespace (not core)?如何将字符串加载到当前命名空间(不是核心)?
【发布时间】:2011-09-20 13:52:17
【问题描述】:

我可以使用以下方式加载任意 Clojure 源代码:

(load-string source)

但是,如果没有提供命名空间,它会将代码加载到 clojure.core 命名空间。

例如以下代码:

(load-string "(defn add [a b] (+ a b))")

定义一个函数:

#'clojure.core/add

现在,有没有办法将该代码加载到其他命名空间,最好是调用 load-string 函数的同一个命名空间?

(除了在评估之前将命名空间声明添加到source 字符串。我知道它会解决问题 - 我想知道是否有首选方法)

【问题讨论】:

    标签: namespaces clojure


    【解决方案1】:

    def 需要决定新函数应该进入哪个命名空间时,它会查看<em>ns</em> var 的当前值并将新函数添加到该命名空间。因为<em>ns</em> 是一个 var,你可以在调用 load-string 之前动态绑定它

    user> (binding [*ns* (find-ns 'foo)] (load-string "(defn f [] 4)"))
    #'foo/f
    user> (foo/f)
    4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 2013-08-31
      • 1970-01-01
      • 2013-03-29
      • 2011-02-06
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多