Clojurescript макрос и название искажения - PullRequest
0 голосов
/ 02 июня 2018

Контекст

Я использую Clojurescript и пытаюсь определить множество функций во время компиляции, чтобы обернуть Javascript API.Мой код прекрасно работает с более низким уровнем оптимизации компилятора.Да, когда я использую флаг компилятора :optimizations :advanced Clojurescript, компилятор выдает предупреждение: Use of undeclared Var my.namespace/fname, и мой код не работает во время выполнения (некоторые искаженные символы не найдены).

Вот минимумпример проблемы:

(defmacro create-a-function [l]
  `(defn ~l [o#] (inc o#)))

(create-a-function fname)

;; Below inside another function
(defn fname-clone [k]
  (fname k))

Я определяю функцию с именем fname во время компиляции, используя макрос create-a-function.Когда я пытаюсь вызвать функцию во время выполнения, происходит сбой.

Что я пробовал?

  • Нижний уровень оптимизации: работает
  • Протестировано, что макрос прекрасно работает в repl
  • . При использовании команды Declare, например (declare fname), которая избавляется от предупреждения во время компиляции, но завершается с ошибкой во время выполнения с той же ошибкой. Мой вопрос

    Как я могу заставить этот вид кода работать с продвинутым уровнем оптимизации?

1 Ответ

0 голосов
/ 02 июня 2018

Я воспроизвел ваш код в этом репо , и он работает.

Обратите внимание, что вы должны поместить свой макрос в .clj файл.

Когда вы хотитечтобы использовать макросы из файла .cljc в ClojureScript, используйте macrovich .

...