次のような名前空間キーを使用してマップを評価する{:person/name "Fred" :person/age 50}
サイダーreplで次の戻り値を出力します#:person{:name "Fred", :age 50}
これは、 *print-namespace-maps*
デフォルトでtrue
です。
通常、この変数の値をset!
永続的に変更できるはずです。
user> (set! *print-namespace-maps* false)
false
user> *print-namespace-maps*
false
ただし、実際の動作は次のとおりです。
user> (set! *print-namespace-maps* false)
false
user> *print-namespace-maps*
true
同様に、変数をbinding
一時的に変更できるはずです:
user> (binding [*print-namespace-maps* false]
[*print-namespace-maps* {:person/name "Fred" :person/age 50}])
[false {:person/name "Fred" :person/age 50}]
しかし、varは変化しているように見えますが、望ましい動作はまだ見られません。
user> (binding [*print-namespace-maps* false]
[*print-namespace-maps* {:person/name "Fred" :person/age 50}])
[false #:person{:name "Fred", :age 50}]
;; CIDER 0.15.0 (London), nREPL 0.2.13
;; Clojure 1.9.0, Java 1.8.0_92
2016-06-01のGNUEmacs 24.5.1(x86_64-apple-darwin15.3.0、NS apple-appkit-1404.34)
OSX El Capitan、バージョン10.11.6
これがCIDER固有の問題であるかどうかはわかりませんが、この問題をLeiningenREPLで再現できます。
これは、nREPLまたはREPLYの実装と関係があることを示しています。
https://github.com/cemerick/nREPL/blob/master/src/main/clojure/clojure/tools/nrepl/middleware/interruptible_eval.cljは-それが正しいことは、想定しないのevalの実装のように見えること(get-thread-bindings)
は、本来の機能を実行します。 Clojure 1.9での実装は問題なく見え、REPLで正しいことを行います。 これは、nREPLのセッション管理またはその上流の何かが*print-namespace-maps*
正しくキャプチャおよび復元していないことを示しています。
https://github.com/cemerick/nREPL/blob/master/src/main/clojure/clojure/tools/nrepl/middleware/session.clj#L108-これは少し疑わしいかもしれませんが、それは知りません*print-namespace-maps*
が、それが問題になる必要はありません。
clojure.main/with-bindings
は、 clojure.main/repl
を通過するすべてのもののルートバインディングを確立します。これには、 *print-namespace-maps*
デフォルトバインディングであるtrue
プッシュが含まれます。 clojure/core_print.clj
の*print-namespace-maps*
のルート定義はfalse
です。 この動作はclj -e "(get-thread-bindings)"
で確認でき、 {#'clojure.core/*print-namespace-maps* true ...}
が報告されます。
これは、nREPLまたはREPLYの実装と関係があることを示しています。
REPLyがnREPLに加えて特別なことをしているとは思えないので、nREPLの問題である可能性があります。
clojure.mainはprint-namespace-mapsをバインドし、replの評価全体でその値を保持します。 nreplで同等の方法がわかりませんが、それが必要です。
私はこれを少し前に関連する筆記体の問題で分析しました:cursive-ide / cursive#1541。
https://github.com/clojure/tools.nreplで問題を繰り返し、ここで閉じますか、
@Reefersleepほぼ。
https://github.com/clojure/tools.nreplは。 そこでチケットを提出してください。
@bbatsovはエラーがここにあると信じているため、この問題をnreplリポジトリにhttps :
最も参考になるコメント
これがCIDER固有の問題であるかどうかはわかりませんが、この問題をLeiningenREPLで再現できます。