那可以试试用eq,eq是比=快的。是我疏忽了,因为=要分别判断 浮点,整数,大整这几个不同的数字类型。eq就是比较指针。另外一方面,你有没有把macro编译之后再做bench?macro展开也是需要时间的。
(defmacro my/number-case (form &rest clauses)
(declare (indent 1) (debug cl-case))
(macroexp-let2 macroexp-copyable-p form form
`(cond ,@(mapcar (lambda (c)
(pcase-exhaustive c
(`(,head . ,handlers)
(if (memq head '(t otherwise))
`(t ,@handlers)
`((eq ,head ,form)
,@handlers)))))
clauses))))
(my/number-case 1
(1 (+ 1 2))
(3 4))