2

これは期待どおりに機能します。

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では機能しません。

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}))))"

の出力(doc println)

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

何が間違っているのかわかりません。

4

1 に答える 1

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\"}"

トリックは、with-bindings呼び出す前に使用することreplです:

(with-bindings {#'clojure.repl/print-doc str}
  (repl))
于 2012-10-01T10:35:07.597 に答える