2012-09-30 30 views
2

這按預期工作:爲什麼不能在Clojure REPL中更改clojure.repl/print-doc綁定?

java -jar clojure-1.4.0.jar -e "(do (require 'clojure.repl) (.setDynamiC#'clojure.repl/print-doc) (with-bindings {#'clojure.repl/print-doc str} (eval '(clojure.repl/doc println))))" 

輸出:

"{:ns #<Namespace clojure.core>, :name println, :arglists ([& more]), :added \"1.0\", :static true, :doc \"Same as print followed by (newline)\", :line 3325, :file \"clojure/core.clj\"}" 

但同樣在REPL不起作用:

輸出 (doc println)
java -jar clojure-1.4.0.jar -e "(do (require 'clojure.repl) (.setDynamiC#'clojure.repl/print-doc) (clojure.main/repl :init (fn [] {#'clojure.repl/print-doc str}))))" 

user=> (doc println) 
------------------------- 
clojure.core/println 
([& more]) 
    Same as print followed by (newline) 
nil 
user=> 

我不知道我在做什麼錯。

+0

@noahzİ'm期待上面的地圖輸出。我不明白爲什麼綁定在REPL之外工作,但不在REPL之內。 –

回答

2

找到答案潛入逆時針和nrepl代碼之後:

java -jar clojure-1.4.0.jar -e "(do (require 'clojure.repl) (.setDynamiC#'clojure.repl/print-doc) (with-bindings {#'clojure.repl/print-doc str} (clojure.main/repl)))))" 

的輸出是與上述相同的:

"{:ns #<Namespace clojure.core>, :name println, :arglists ([& more]), :added \"1.0\", :static true, :doc \"Same as print followed by (newline)\", :line 3325, :file \"clojure/core.clj\"}" 

訣竅是調用repl前使用with-bindings

(with-bindings {#'clojure.repl/print-doc str} 
    (repl)) 
相關問題