Ссылка на внешние пространства имен clojurescript

Если в файле .cljs я определяю файл следующим образом:

main.cljs

   (ns project.main
      (:use [project.secondfile :only [my-var]]))

   (js/alert my-var)

второй файл.cljs

   (ns project.secondfile)
   (def my-var "Hi")

Я получаю сообщение «Referred var project.secondfile/my-var не существует в src-cljs/main.cljs». Тем не менее, он нормально работает в браузере, поскольку оба скомпилированы (и с компиляциями :whitespace они могут прекрасно ссылаться друг на друга). Но, очевидно, это не работает в bREPL, поскольку они не ссылаются друг на друга.

Это что-то неизбежное или я делаю что-то не так?

Спасибо!


person Leberecht Reinhold    schedule 24.10.2013    source источник


Ответы (1)


Я попробовал ваш код и отлично работает в моей текущей конфигурации. У меня были другие проблемы, похожие на ваш вопрос, и в этих случаях вы можете попытаться скомпилировать и загрузить secondfile.cljs в brepl, прежде чем пытаться скомпилировать и загрузить main.cljs. В этом случае этот трюк отлично работает. Возможно, проблема в том, что secondfile.cljsdef my-var ) не существовали до компиляции cljsbuild, поэтому, когда вы пытались использовать этот my-var, этот код был недоступен.

Надеюсь, это поможет вам
Хуан

person tangrammer    schedule 25.10.2013
comment
Это было оно. Компилировать их с помощью brepl немного хлопотно, но это работает. Другой вариант, который, кажется, работает, — это алфавитный порядок. Компилятор, кажется, использует file-seq, который использует file.listFiles(), который не гарантирует порядок, но, по крайней мере, работает большую часть времени и проще (и, в конце концов, это действительно не имеет значения, просто получает избавиться от предупреждений). - person Leberecht Reinhold; 25.10.2013