为什么不能在Clojure REPL中更改clojure.repl/print-doc绑定?

这按预期工作:为什么不能在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=>

我不知道我在做什么错。

回答:

找到答案潜入逆时针和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))

以上是 为什么不能在Clojure REPL中更改clojure.repl/print-doc绑定? 的全部内容, 来源链接: utcz.com/qa/257860.html

回到顶部