2013-09-26 1 views
5

Печатается :bar в Clojure как я бы ожидать:Как вы используете карты, созданные читателем edn в clojurescript?

(println (:foo (clojure.tools.reader.edn/read-string "{:foo :bar}"))) 
;=> :bar 

Но это печатает nil в ClojureScript:

(println (:foo (cljs.reader/read-string "{:foo :bar}"))) 
;=> nil 

Чтобы сделать вещи незнакомца, это печатает :bar в ClojureScript в Я бы ожидал:

(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

При запуске второго примера в новой замене clojurescript я получаю правильный ответ. Какую версию clojurescript вы используете? – Jared314

+0

Второй пример работает и для меня, не могли бы вы включить форму ns для контекста? –

+0

Ну, это действительно удивительно для меня. Моя версия cljs - 0.0-1896. Как вы получили его для работы в реплике? Каждый раз, когда я пытался '(require '[cljs.reader: как читатель])' У меня ошибка компиляции. – bmaddy

ответ

2

Попробуйте это:

(.log js/console 
    ((keyword "foo") (cljs.reader/read-string "{:foo :bar}"))) 

Если это работает, и генерирует ﷐:bar, у вас есть старый сгенерированный код висит вокруг, и вы должны запустить lein cljsbuild clean.

В 0.0-1877 имело место изменение ключевых слов в сгенерированном javascript от ﷐:foo до cljs.core.Keyword.

2

значение возвращение Println равна нулю и, возможно, выход из печати, скорее всего, происходит в другой буфер, если вы используете 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 

против:

ClojureScript:cljs.user> (:foo (cljs.reader/read-string "{:foo :bar}")) 
:bar 
+0

Я не уверен, что это то, о чем он говорит. Обратите внимание на результат третьего примера. – Jared314

+0

Я тоже не уверен, это всего лишь предположение и сопровождающий рабочий пример. –

 Смежные вопросы

  • Нет связанных вопросов^_^