如何在cljs宏中管理依赖项?

问题描述 投票:1回答:1

说我在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
--------------------------------------------------------------------------------

为什么会这样?

clojure macros clojurescript
1个回答
0
投票

编译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?

© www.soinside.com 2019 - 2024. All rights reserved.