我正在学习如何在emacs lisp中编程。我以为我会编写一个简单的函数,将函数定义打印到消息缓冲区。这很好用:
(let (
(fDefAsString (symbol-function 'scroll-down))
)
(message "%s" fDefAsString)
(switch-to-buffer-other-frame "*Messages*"))
但我希望这是一个可以接受参数的函数,该参数是我希望看到的函数的名称。所以我尝试了这个:
(defun message-function-definition (nameOfFunction)
(let (
(fDefAsString (symbol-function 'nameOfFunction))
)
(message "%s" fDefAsString)
(switch-to-buffer-other-frame "*Messages*")))
然后我写了这个:
(message-function-definition 'scroll-down)
然后我跑了“eval-buffer”。
我一直收到这个错误:
调试器输入 - Lisp错误:(void-function nameOfFunction) 符号函数(nameOfFunction) (let((fDefAsString ...))(消息“%s”fDefAsString)(切换到缓冲区 - 其他帧“消息”)) 消息功能清晰度(向下滚动) eval((message-function-definition(quote scroll-down))) EVAL-最后SEXP-1(无) EVAL-最后SEXP(无) 交互式呼叫(eval-last-sexp nil nil) 递归编辑() 字节码(“\ 306 @ \ 307 = \ 203!
我试过引用,取消引用,我尝试使用“nameOfFunction”,但我无法让它工作。我做错了什么?
答案 0 :(得分:1)
你试过不引用吗?这对我有用:
(defun message-function-definition (nameOfFunction)
(let ((fDefAsString (symbol-function nameOfFunction)))
(message "%s" fDefAsString)
(switch-to-buffer-other-frame "*Messages*")))
一些提示:
您的代码未正确缩进。如果您选择区域并使用标签重新缩进,则会更容易阅读。
你应该花几个小时来完成“Emacs Lisp Intro”, 您将更好地了解Emacs-lisp中的工作原理 而不是通过在StackOverflow上一次询问一个问题来解决所有问题。
symbol-function
并非旨在显示人类可读的定义
功能。在大多数情况下,你不会真正看到任何有用的东西。
试试这个:
(find-function-other-window 'scroll-down)