๋ค์๊ณผ ๊ฐ์ ๋ค์์คํ์ด์ค ํค๋ก ๋งต ํ๊ฐ
{:person/name "Fred" :person/age 50}
์ฌ์ด๋ค repl์์ ๋ค์ ๋ฐํ ๊ฐ์ ์ธ์ํฉ๋๋ค.
#:person{:name "Fred", :age 50}
์ด๋ *print-namespace-maps*
๊ฐ true
๊ธฐ๋ณธ ์ค์ ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด set!
๋ก ์ด var์ ๊ฐ์ ์๊ตฌ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
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
var๋ฅผ ์ผ์์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
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์ GNU Emacs 24.5.1(x86_64-apple-darwin15.3.0, NS apple-appkit-1404.34)
OSX ์ ์บํผํ, ๋ฒ์ 10.11.6
์ด๊ฒ์ด CIDER ๊ณ ์ ์ ๋ฌธ์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง Leiningen REPL์์ ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.
์ด๋ nREPL ๋๋ REPLY์ ๊ตฌํ๊ณผ ๊ด๋ จ์ด ์์์ ์์ฌํฉ๋๋ค.
https://github.com/cemerick/nREPL/blob/master/src/main/clojure/clojure/tools/nrepl/middleware/interruptible_eval.clj - (get-thread-bindings)
๋ผ๊ณ ๊ฐ์ ํ๋ฉด eval ๊ตฌํ์ด ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค *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
๋ *print-namespace-maps*
๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ true
ํธ์๋ฅผ ํฌํจํ์ฌ clojure.main/repl
ํต๊ณผํ๋ ๋ชจ๋ ๊ฒ์ ๋ํ ๋ฃจํธ ๋ฐ์ธ๋ฉ์ ์ค์ ํฉ๋๋ค. ์ ๋ฃจํธ ์ ์ *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์ print-namespace-maps๋ฅผ ๋ฐ์ธ๋ฉํ ๋ค์ repl์ ํ๊ฐ ์ ๋ฐ์ ๊ฑธ์ณ ๊ฐ์ ์ ์งํฉ๋๋ค. nrepl์์ ์ด์ ์์ํ๋ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ทธ๊ฒ์ด ํ์ํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ๊ด๋ จ ํ๊ธฐ์ฒด ๋ฌธ์ ์ธ cursive-ide/cursive#1541์์ ์ผ๋ง ์ ์ ๋ถ์ํ์ต๋๋ค.
https://github.com/clojure/tools.nrepl ์์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณตํ๊ณ @bbatsov ์์ ์ฌ๊ธฐ์
@Reefersleep ๊ฑฐ์.
https://github.com/clojure/tools.nrepl ์ . ๊ฑฐ๊ธฐ์ ํฐ์ผ์ ์ ์ถํด ์ฃผ์ธ์.
@bbatsov ์ฌ๊ธฐ์ ์ค๋ฅ ๊ฑฐ์ง๋ง์ ๋ฏฟ๊ณ ๋ก nrepl์ repo์์์ด ๋ฌธ์ ๋ฅผ ๋ค์ ๊ฒ์ : https://github.com/nrepl/nREPL/issues/33
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ด CIDER ๊ณ ์ ์ ๋ฌธ์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง Leiningen REPL์์ ์ด ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ต๋๋ค.