在 Common Lisp 中我定义了这个宏:
(defmacro gen-update-func (func-name table id keyparam)
`(defun ,func-name (db ,id)
(let ((data))
(keyparams ,keyparam)
(clsql:update-records ',table
:database db
:where [= ',id id]
:av-pairs data))))
我这样称呼它:
(gen-update-func add-sp spender spenderid (vorname name))
macroexpand-1 返回以下内容:
(defun add-sp (db spenderid)
(let ((data))
;(keyparams (vorname name))
(clsql-sys:update-records 'spender :database db :where [= 'spenderid id]
:av-pairs data)))
这是预料之中的。
当我调用它时,它将行“:where [=',id id]”解析为:
:WHERE SPENDENDB::[= 'SPENDENDB::SPENDERID SPENDENDB::ID]
这是错误的。我想插入 [= 字面意思,而不使用 SPENDENDB::。这是有意为之:
:WHERE [= 'SPENDENDB::SPENDERID SPENDENDB::ID]
我怎样才能实现这个目标?
语法 [= ... ] 是来自 clsql 的特殊 SQL 语法。