嗨,大家好:我想看看我的命名空間中的所有函數,來自repl(用於快速黑客入侵和測試)。如何模仿使用中的「加載文件」行爲?
使用方法與負載有什麼不同?
我注意到,如果我「加載文件」x,所有導入現在在我的名字空間(即使是在文件外部)。但是,如果我「使用」x(通過引用x的命名空間),那些在x中導入的類是而不是可以在repl處獲得。
有沒有一種方法可以用來模擬加載文件將文件導入到我的repl中的方式?
嗨,大家好:我想看看我的命名空間中的所有函數,來自repl(用於快速黑客入侵和測試)。如何模仿使用中的「加載文件」行爲?
使用方法與負載有什麼不同?
我注意到,如果我「加載文件」x,所有導入現在在我的名字空間(即使是在文件外部)。但是,如果我「使用」x(通過引用x的命名空間),那些在x中導入的類是而不是可以在repl處獲得。
有沒有一種方法可以用來模擬加載文件將文件導入到我的repl中的方式?
像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 IT將use
轉換成repl的當前ns
使用將所有公共變量導入當前名稱空間。那不是你想要的嗎?
例子:
user> (use 'clojure.pprint)
nil
user> (pprint [:foo])
[:foo]
nil
你是對的,我澄清了這個問題,我的意思是說,我希望我的x.clj文件的導入被加載到我的repl中,我有一個「x」。 clj「文件,它導入了很多類,我希望這些類方法可以在唱歌后從repl中調用le call(使用'x')。 – jayunit100
嘛,不這樣做:P。如果你想進入一個特定的命名空間,那麼爲什麼不直接進入這個命名空間呢,而不是冒充某種瘋狂的use
來將所有東西導入user
ns? (require 'myns) (in-ns 'myns)
這樣做,還是一個方便的快捷方式(doto 'myns require in-ns)
。
嗯沒關係。看起來像這樣刪除了標準的repl導入。有沒有辦法保留這些?例如,(源)宏將不再工作.... – jayunit100
不正確。 'use'是一個簡單的舊函數,它實現在諸如'require'和(我認爲)'intern'之類的基元之上。 – amalloy