2012-09-30 70 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)) 
相关问题