Gor*_*vic 6 namespaces clojure
我可以使用以下方法加载任意Clojure源:
(load-string source)
但是,如果未提供名称空间,则会将代码加载到clojure.core
名称空间.
例如,以下代码:
(load-string "(defn add [a b] (+ a b))")
定义一个函数:
#'clojure.core/add
现在,有没有办法将该代码加载到其他命名空间,最好load-string
是调用函数的同一个命名空间?
(除了source
在评估之前将名称空间声明添加到字符串之外.我知道它可以解决问题 - 我想知道是否有一种首选方式)
Art*_*ldt 12
当def
需要决定新函数应该进入哪个namspace时,它会查看ns
var 的当前值并将新函数添加到该命名空间.因为ns
是一个var,你可以在调用load-string之前动态绑定它
user> (binding [*ns* (find-ns 'foo)] (load-string "(defn f [] 4)"))
#'foo/f
user> (foo/f)
4
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
546 次 |
最近记录: |