Emacs 证明宇称不守恒

如题,执行下面的代码后:

(defun advice-around-Info-scroll (scroll-command)
  (cl-flet ((traced (sym)
              (let ((func (symbol-function sym)))
                (lambda (&rest args)
                  (message "%s 调用了" sym)
                  (prog1 (apply func args)
                    (message "%s 返回了" sym))))))
    (cl-letf (((symbol-function 'scroll-up)   (traced 'scroll-up))
              ((symbol-function 'scroll-down) (traced 'scroll-down)))
      (funcall scroll-command))))

(advice-add 'Info-scroll-up   :around 'advice-around-Info-scroll)
(advice-add 'Info-scroll-down :around 'advice-around-Info-scroll)

Info 中上翻页会输出 “scroll-up 返回了”,但是下翻页什么都不会输出。不过重新求值 Info-scroll-down 的定义之后:

(progn
  (find-function 'Info-scroll-down)
  (eval (sexp-at-point)))

就没有这个问题了。

我本地测试没有问题啊

666还有标题党(

1 个赞

对啊,确实标题党,在这里不合适。

@hauka 修改下吧

你@我干嘛(

别又是lexical-binding没开造成的乌龙吧。。。

不好意思,at错了,我改下。