Cider: * طباعة خرائط مساحة الاسم * صحيحة دائمًا

تم إنشاؤها على ٢ مايو ٢٠١٨  ·  8تعليقات  ·  مصدر: clojure-emacs/cider

السلوك المتوقع والسلوك الفعلي وخطوات إعادة إنتاج المشكلة

تقييم الخريطة بمفاتيح بمساحة الأسماء مثل
{:person/name "Fred" :person/age 50}
في استبدال عصير التفاح يطبع القيمة المعادة التالية
#:person{:name "Fred", :age 50}
هذا يرجع إلى *print-namespace-maps* الافتراضي إلى true .
عادة ، يجب أن يكون من الممكن تغيير قيمة هذا var بشكل دائم باستخدام 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

وبالمثل ، يجب أن يكون من الممكن تغيير var مؤقتًا باستخدام 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

نسخة إيماكس

GNU Emacs 24.5.1 (x86_64-apple-darwin15.3.0، NS apple-appkit-1404.34) بتاريخ 2016/01/01

نظام التشغيل

OSX El Capitan ، الإصدار 10.11.6

التعليق الأكثر فائدة

لا أعرف ما إذا كانت هذه مشكلة خاصة بـ CIDER ، يمكنني إعادة إنتاج هذه المشكلة في Leiningen REPL.

ال 8 كومينتر

لا أعرف ما إذا كانت هذه مشكلة خاصة بـ CIDER ، يمكنني إعادة إنتاج هذه المشكلة في Leiningen REPL.

يشير ذلك إلى أن الأمر يتعلق بتنفيذ 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 . تعريف الجذر لـ *print-namespace-maps* في clojure/core_print.clj هو false . يمكن تأكيد هذا السلوك من خلال clj -e "(get-thread-bindings)" والذي سيبلغ عن {#'clojure.core/*print-namespace-maps* true ...} .

يشير ذلك إلى أن الأمر يتعلق بتنفيذ nREPL أو REPLY.

أشك في أن REPLy تفعل أي شيء خاص فوق nREPL ، لذلك من المحتمل أن تكون مشكلة nREPL.

يربط clojure.main خرائط مساحة الاسم المطبوعة ثم يحتفظ بقيمته عبر التقييمات في Rep. لست متأكدًا من كيفية عمل المكافئ في nrepl ، لكن هذا هو المطلوب.

لقد قمت بتحليل هذا منذ فترة في المسألة المخطوطة ذات الصلة: cursive-ID / cursive # 1541.

هل يجب أن أكرر المشكلة على https://github.com/clojure/tools.nrepl وأغلقها هنا ،

تضمين التغريدة

https://github.com/clojure/tools.nrepl خلفه https://github.com/nrepl/nrepl. من فضلك ، أرسل التذكرة هناك.

إعادة نشر هذه المشكلة في nrepl repo حيث يعتقد bbatsov أن الخطأ يكمن هنا: https://github.com/nrepl/nREPL/issues/33

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات