gpt4 book ai didi

emacs - Elisp:让符号函数返回源代码?

转载 作者:行者123 更新时间:2023-12-05 06:45:43 28 4
gpt4 key购买 nike

这是设置:

(defun square (x)
(* x x))
;; square
(symbol-function 'square)
;; (lambda (x) (* x x))
(byte-compile 'square)
;; #[(x) "\211_\207" [x] 2]
(symbol-function 'square)
;; #[(x) "\211_\207" [x] 2]

square 被字节编译后,有没有办法获取源代码 (lambda (x) (* x x))

我能想到的两种用法是内联当前函数调用并执行调试步骤。

我试过弄乱 find-definition-noselect 来获取源代码,但我想知道是否有更好的方法,因为它有时会引发

(error "Don't know where ... is defined")

最佳答案

Emacs 跟踪在哪个文件 中定义了哪个函数name(此信息保存在load-history 中)。为了找到定义,Emacs 会在 load-history 中查找,如果该函数列在那里,它会查找相应的源文件,然后在该文件中查找看起来像是该函数的可能定义的内容(使用正则表达式)。这就是 find-definition-noselect 所做的。

至于源码,一般Emacs不保留源码定义。如果您使用 cl-defsubst 定义函数,则源代码会保留下来,否则就不会。对于 Edebugging,无论如何拥有源代码都无济于事(因为 Edebug 不仅需要源代码,还需要每个子表达式的精确位置);对于普通调试,源代码也不是真正需要的(您总是可以单击函数的名称以跳转到源代码);也不需要内联源代码(字节编译器确实可以在源代码级别内联,但它也可以在字节代码级别内联)。

关于emacs - Elisp:让符号函数返回源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224045/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com