按照我的预期在 Clojure 中打印:bar
:
(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}")))
;=> :bar
但是这会在 ClojureScript 中打印nil
:
(println (:foo (cljs.reader/read-string "{:foo :bar}")))
;=> nil
为了让事情变得陌生,我会按照我的预期在 ClojureScript 中打印:bar
:
(let [data (cljs.reader/read-string "{:foo :bar}")]
(println ((first (keys data)) data )))
;=> :bar
如何访问由阅读器创建的地图中的值?这是字符编码吗?
修改
以下是评论中要求的命名空间:
(ns clojuresite.homepage
(:require-macros [hiccups.core :as hiccups])
(:require [hiccups.runtime :as hiccupsrt]
[cljs.nodejs :as node]
[cljs.reader :as reader]))
答案 0 :(得分:2)
println的返回值为nil 如果您正在使用emacs或在其他地方记录,则打印输出可能会进入另一个缓冲区。也许你看到println
的返回值而不是它的输出。
ClojureScript:cljs.user> (ns cljs.user (:require [cljs.reader :as edn]))
nil
ClojureScript:cljs.user> (println (:foo (cljs.reader/read-string "{:foo :bar}")))
:bar
nil
VS
ClojureScript:cljs.user> (:foo (cljs.reader/read-string "{:foo :bar}"))
:bar
答案 1 :(得分:2)
试试这个:
(.log js/console
((keyword "foo") (cljs.reader/read-string "{:foo :bar}")))
如果可行,并生成:bar
,则会生成旧的生成代码,您应该运行lein cljsbuild clean
。
在0.0-1877
中,生成的javascript中的关键字从:foo
转换为cljs.core.Keyword
后发生了变化。