大家好:我想查看我的命名空间中的所有函数,来自repl(用于快速黑客攻击和测试)。
使用与加载有何不同?
我注意到如果我"加载文件" x,所有导入现在都在我的命名空间中(即使是文件外部的那些)。
但是,如果我"使用" x(通过引用x' s名称空间),在x中导入的那些类在repl处可用不。
有没有办法可以模仿load-file包含文件导入我的repl的方式?
答案 0 :(得分:1)
使用将所有公共变量导入当前名称空间。那不是你想要的吗?
示例:
user> (use 'clojure.pprint)
nil
user> (pprint [:foo])
[:foo]
nil
答案 1 :(得分:1)
好吧,不要这样做:P。如果你想要在一个特定的命名空间中,那么为什么不直接进入那个命名空间,而不是假装某种疯狂的use
将所有内容导入user
ns。 (require 'myns) (in-ns 'myns)
可以做到这一点,或者是一个方便的快捷方式(doto 'myns require in-ns)
。
答案 2 :(得分:1)
use
这样的特殊形式很特别。你不能将“使用”命名空间的函数编写到调用者ns中。但是一个简单的宏可以拯救你!
在我让leiningen正确加载我的repl之前,我在一个项目中做到了这一点
(defmacro load-all []
'(use
:reload-all
'com.cryptovide.modmath
'com.cryptovide.combine
'com.cryptovide.split
'com.cryptovide.encrypt
'com.cryptovide.misc
'com.cryptovide.decrypt
'com.cryptovide.modmathTest
'com.cryptovide.combineTest
'com.cryptovide.splitTest
'com.cryptovide.encryptTest
'com.cryptovide.miscTest
'com.cryptovide.decryptTest
'com.cryptovide.testlib
'com.cryptovide.gui
'com.cryptovide.checksum
'com.cryptovide.log))
当你调用它时,阅读器会从你调用它的命名空间中运行use
es(例如它将use
它们放入repl的当前 ns < / p>