如何在clojurescript中使用edn阅读器创建的地图?
如我所料,这将以Clojure打印如何在clojurescript中使用edn阅读器创建的地图?,clojure,clojurescript,edn,Clojure,Clojurescript,Edn,如我所料,这将以Clojure打印:bar: (println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}"))) ;=> :bar (let [data (cljs.reader/read-string "{:foo :bar}")] (println ((first (keys data)) data ))) ;=> :bar 但这会在ClojureScript中打印nil: 为了让事情变得更奇怪,正如
:bar
:
(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}")))
;=> :bar
(let [data (cljs.reader/read-string "{:foo :bar}")]
(println ((first (keys data)) data )))
;=> :bar
但这会在ClojureScript中打印nil
:
为了让事情变得更奇怪,正如我所期望的那样,这在ClojureScript中打印了:bar
:
(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}")))
;=> :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]))
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:
试试这个:
(.log js/console
((keyword "foo") (cljs.reader/read-string "{:foo :bar}")))
如果有效,则生成:bar
,旧生成的代码随处可见,应该运行lein cljsbuild clean
0.0-1877
中有一个变化,它将生成的javascript中的关键字从:foo
tocljs.core.Keyword
在新的clojurescript repl中运行第二个示例时,我得到了正确的答案。你用的是什么clojurescript版本?第二个例子对我也适用,你能把ns表单包含在上下文中吗?我真的很惊讶。我的cljs版本是0.0-1896。你是如何让它在repl中工作的?每次我尝试(require'[cljs.reader:as reader])
时,我都会遇到一个编译错误。我在repl中使用了名称空间表单来要求它。我不确定这就是他所说的。请注意第三个示例的结果。我也不确定,这只是一个猜测和一个附带的工作示例。