说我在clj文件中有一个要在cljs文件中使用的宏
(defmacro defelem [name element]
`(defcard ~name
(ct.react/react-card
(r/as-element
[~element]
)
)
)
)
并且依赖关系是ct.react和r。 clj或cljs文件中是否需要依赖项?我都尝试过,但都没有用。
我得到阴影中的错误:
(defelem cart-card cart)
-------^------------------------------------------------------------------------
Use of undeclared Var myapp.workspaces.cards/react-card
--------------------------------------------------------------------------------
为什么会这样?
编译defmacro
时不需要存在完全限定的符号。这意味着您可以直接在宏中编写它们,只要被引用的var在运行时存在,它就可以工作:
(defmacro defelem [name element]
`(defcard ~name
(package.cljs.ns/react-card
(r/as-element [~element]))))
当然,这意味着如果您尝试引用不存在的var,则编译器将无法保护您,因此您需要比平时更加小心。
参见:How do I deal with required Clojurescript code from Clojurescript macros?