ClojureScript Eval. Как использовать библиотеки, включенные в код вызова

У меня в браузере работает программа Clojurescript.

Он импортирует несколько библиотек, и затем я хочу разрешить пользователю вводить небольшой небольшой код "склеивания", который вызывает эти библиотеки.

Я вижу (из https://cljs.github.io/api/cljs.js/eval), что вы вызываете eval с четырьмя аргументами, первым из которых является состояние среды, которая представляет собой атом. Но могу ли я на самом деле превратить мою текущую среду со всеми функциями, которые мне требуются из других источников, в подходящий аргумент для eval?

Обновить:

Я подумал, что, возможно, я мог бы установить пространство имен для eval, используя опцию:ns третьего, opts-map, аргумент. Я установил его в пространство имен моего приложения:

:ns "fig-pat.core"

Но без разницы.

Глядя на консоль, это определенно тот случай, когда он пытается выполнить оценку, но жалуется, что имена, на которые есть ссылки в eval-ed коде, НЕ распознаются:

WARNING: Use of undeclared Var /square

например. (квадрат - это функция, которая мне нужна. Она видна в самом приложении, т. е. в пространстве имен fig-pat.core)

Я тогда получаю:

SyntaxError: expected expression, got '.'[Learn More]

Который я предполагаю, что это провал правильного выражения в целом.

Обновление 2:

Я предполагаю, что эта проблема на самом деле может быть связана с: Как я могу получить пространство имен Clojurescript, в котором я нахожусь, из программы clojurescript?

(println *ns*)

просто печатает ноль. Так что, возможно, Clojurescript не может видеть свое собственное пространство имен.

И поэтому:ns в eval не работает?

1 ответ

Призвание eval Внутри clojurescript программа является частью того, что называется "самодостаточным clojurescript". В самодостаточном clojurescript пространства имен недоступны, если вы не реализуете политику разрешения. Это означает, что браузер должен знать, как разрешить пространство имен, например, загружать файл cljs из cdn.

Реализовать правильное разрешение пространства имен не так просто. Это объясняется загадочно в документации load-fn из пространства имен cljs.js.

Некоторые инструменты поддерживают распознавание пространств имен в cljs с собственным хостом, запущенных в браузере, например, Klipse и crepl

Другие вопросы по тегам