性能优化求大神指导

那可以试试用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))