Этот вопрос основан на ограничении this answer.Склеивание unquote для нелитеральных последовательностей
Если у меня есть макрос, который использует сплайсинг конец цитату, как это:
(defmacro instantiate [klass values]
`(new ~klass [email protected]))
Это будет работать только если values
является буквальной последовательностью или последующим-состояние.
Если он передается вар держит последовательность, как:
(def v [1 2 3])
(macroexpand '(instantiate Person v))
Тогда выходной сигнал будет об ошибке, указывающее, что v
не является последовательностью.
Даже вызов функции будет интерпретироваться как список:
(defn vf [] [1 2 3])
(macroexpand '(instantiate Person (vf)))
user=>(new Person vf)
Мой вопрос: есть ли способ использовать сплайсинга конец цитаты в Clojure макросы в этих двух случаях, когда последовательность быть сращены ISN» ли буквальный?
Поэтому иногда это невозможно, иногда - плохая идея. Благодарю. –