【发布时间】:2020-08-24 06:18:57
【问题描述】:
我正在尝试将我的宏转换为以下扩展:
(re-frame.core/reg-event-db
:some-name
(fn [db [foo bar]]
(assoc db :foo foo :bar bar)
))
到目前为止我有这个
(defmacro db-event
[name params & body]
`(re-frame.core/reg-event-db
~name
(fn [db ~params]
~@body)))
但是当我尝试使用时,这并没有真正起作用
(db-event :some-name [foo bar]
(assoc db :foo foo :bar bar))
我得到以下信息:
------ WARNING - :undeclared-var -----------------------------------------------
Resource: :1:17
Use of undeclared Var vendo.macros/foo
--------------------------------------------------------------------------------
------ WARNING - :undeclared-var -----------------------------------------------
Resource: :1:21
Use of undeclared Var vendo.macros/bar
--------------------------------------------------------------------------------
------ WARNING - :undeclared-var -----------------------------------------------
Resource: :1:33
Use of undeclared Var vendo.macros/db
--------------------------------------------------------------------------------
------ WARNING - :undeclared-var -----------------------------------------------
Resource: :1:41
Use of undeclared Var vendo.macros/foo
--------------------------------------------------------------------------------
------ WARNING - :undeclared-var -----------------------------------------------
Resource: :1:50
Use of undeclared Var vendo.macros/bar
--------------------------------------------------------------------------------
(re-frame.core/reg-event-db {:foo nil, :bar nil} (cljs.core/fn [vendo.macros/my-db nil]))
我该如何解决这个问题?
【问题讨论】:
-
也许宏也接受用于
db参数的符号是个好主意。 -
我至少可以看到一个问题:
db被命名空间,所以你需要做类似的事情:(fn [~'db ~params] ~@body)