【发布时间】:2016-09-27 00:22:16
【问题描述】:
我试图写一个宏来比较多个表达式的运行时间,结果碰壁了。我的问题可以浓缩为以下代码:
(defmacro test-m [& exprs]
`(map #(.toString %) ~exprs))
如果我将其称为 (test-m 1 2 3),我希望它会生成如下代码:
(map #(.toString %) [1 2 3])
这是完全有效的。不幸的是,这实际上会导致错误:
ClassCastException java.lang.Long 无法转换为 clojure.lang.IFn helpers.general-helpers/eval663 (NO_SOURCE_FILE:76)
我看到这可能发生的唯一方法是如果& exprs 导致(1 2 3),然后它会尝试将1 作为函数调用,这显然是错误的。
如何映射宏中的可变参数列表?
【问题讨论】:
标签: clojure macros variadic-macros