如何获取一个变量来表示“symbol-function()”的函数名

Posted

技术标签:

【中文标题】如何获取一个变量来表示“symbol-function()”的函数名【英文标题】:how to get a variable to represent a function name for "symbol-function()" 【发布时间】:2012-08-18 21:43:18 【问题描述】:

我正在学习如何在 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 ...)) (message "%s" fDefAsString) (switch-to-buffer-other-frame "Messages")) 消息功能定义(向下滚动) eval((message-function-definition (quote scroll-down))) eval-last-sexp-1(nil) eval-last-sexp(nil) 交互式调用(eval-last-sexp nil nil) 递归编辑() 字节码("\306 @\307=\203!

我尝试过引用、取消引用,并尝试使用“nameOfFunction”,但无法使其正常工作。我做错了什么?

【问题讨论】:

【参考方案1】:

您是否尝试取消引用?这对我有用:

(defun message-function-definition (nameOfFunction)
  (let ((fDefAsString (symbol-function nameOfFunction)))
    (message "%s" fDefAsString)
    (switch-to-buffer-other-frame "*Messages*")))

一些提示:

    您的代码没有正确缩进。如果您选择区域并使用 tab 重新缩进,它会更容易阅读。

    您应该花几个小时完成“Emacs Lisp 介绍”, 您将对 Emacs-lisp 中的工作方式有更好的了解,而不是 而不是通过在 *** 上一次问一个问题来解决所有问题。

    symbol-function 并非旨在显示人类可读的定义 功能。在大多数情况下,您不会真正看到任何有用的东西。

    试试这个:

    (find-function-other-window 'scroll-down)
    

【讨论】:

如果我将 (find-function-other-window 'scroll-down) 放入一个空缓冲区并运行 eval-buffer 我得到:“调试器进入 - Lisp 错误:(错误“变量绑定深度超过 max-specpdl-size")" 我没有。我正在使用 Emacs 24.1。使用 emacs -Q 启动 emacs。 scroll-down 不是一个很好的例子,因为它是在 C 中定义的。但我仍然可以看到源代码。 现在我得到“C 源文件 window.c 不可用” 奇怪的是,在一个空白的新缓冲区中,我这样做:(symbol-function 'scroll-down) 然后 C-x C-e 我得到的只是:# 我不确定出了什么问题。 您真的想查看函数定义还是其他内容?如果你这样做,你需要安装 C 源代码。

以上是关于如何获取一个变量来表示“symbol-function()”的函数名的主要内容,如果未能解决你的问题,请参考以下文章

js中如何获取当前浏览器的地址的值

如何使用tfrecord

如何用TensorFlow构建RNN

如何用TensorFlow构建RNN

如何在 C 中组合变量来表示科学计数法?

如何在 css 类名中使用 javascript 变量并在 Rails 中通过 jquery 获取 css 颜色名