Cider: * print-namespace-maps *は常にtrueです

作成日 2018年05月02日  ·  8コメント  ·  ソース: clojure-emacs/cider

予想される動作、実際の動作、および問題を再現するための手順

次のような名前空間キーを使用してマップを評価する
{: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バージョン情報

;; CIDER 0.15.0 (London), nREPL 0.2.13
;; Clojure 1.9.0, Java 1.8.0_92

Emacsバージョン

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で再現できます。

全てのコメント8件

これが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

このページは役に立ちましたか?
0 / 5 - 0 評価