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时,它会查看nsvar 的当前值并将新函数添加到该命名空间.因为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 次 |
| 最近记录: |