Сборка CentOS 6 Docker с использованием livemedia-creator не работает

1 .:

Причина, по которой это не работает, (более или менее) приведено на странице, которую вы связали:

It is an error if there is no global var named by the symbol […]

И:

[...]

  1. В текущем пространстве имен выполняется поиск, чтобы увидеть, есть ли отображение из символа в var. Если это так, значение является значением привязки символа var, обозначаемого символом.
  2. Это ошибка.

blockquote>

eval оценивает формы в пустой ( null в CL-lingo) лексической среде. Это означает, что вы не можете получить доступ к привязкам к лексической переменной из области вызова. Кроме того, binding создает новые привязки для существующих vars, поэтому вы не можете использовать его «самостоятельно», не имея declare d или def редактируемые переменные, которые вы пытаетесь связать. Кроме того, лексические переменные (по крайней мере, в CL, но я был бы удивлен, если бы это было не так для Clojure) уже перестали существовать во время выполнения - они переведены на адреса или значения.

См. Также мои старше поста об этой теме.

2..:

Итак, вам нужно использовать динамические переменные. Вы можете избежать явного def, но вам по крайней мере нужно declare их (имена def s var без привязок):

user=> (declare ^:dynamic x)
#'user/x
user=> (binding [x 10] (eval '(prn x)))
10
nil

Кстати: я полагаю, вы знаете почему вам нужно eval, и что его использование считается злом , когда другие решения будут подходящими.

0
задан Abhinav 13 July 2018 в 18:18
поделиться