13.12.5 Advice 和字节码

并非所有函数都能被可靠地增强(advice)。字节编译器可能会选择将某个函数调用替换为一串指令序列,而不再调用你想要修改的那个函数。

这通常由以下三种机制之一造成:

byte-compile 属性

如果一个函数的符号具有 byte-compile 属性,字节编译器会使用该属性,而不是符号本身的函数定义。See 字节编译函数

byte-optimize 属性

如果一个函数的符号具有 byte-optimize 属性,字节编译器可能会重写函数参数,或者直接选择使用另一个完全不同的函数。

compiler-macro 声明形式

一个函数可以在其定义中包含特殊的 compiler-macro declare 声明形式(see declare 形式),它会定义一个 展开器(expander),在编译该函数时被调用。该展开器可能会导致最终生成的字节码不再调用原函数。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike