gpt4 book ai didi

elisp - 在 emacs lisp 中将函数作为参数传递

转载 作者:行者123 更新时间:2023-12-01 09:35:05 25 4
gpt4 key购买 nike

我不确定 emacs lisp 是如何处理函数对象的,是否有一个我没有看到的隐藏参数,当我有这个时,当我点击 C-c p 时它会给出错误错误类型参数:commandp, load-cenet-files

我根本不懂 lisp。

(defun load-cenet-files ()
(load-file "~/.emacs.d/cedet/common/cedet.elc")
(require 'semantic-gcc)
)

(global-set-key (kbd "C-c p") '(load-cenet-files))

最佳答案

Emacs 区分 functionscommands - 后者是一种特殊类型的函数,即可以由用户交互调用的函数。错误消息 Wrong type argument: commandp, load-cenet-files 告诉您代码中的某个点需要一个命令,但得到了其他内容。 commandp 是一个谓词函数,用于检查其参数是否为命令;在这里,它测试了load-cenet-files,发现它不是命令,因此被拒绝。

您可以通过将函数声明为交互式来将其转换为命令。为此,您可以在 (defun function-name (args) 之后的第一行添加 (interactive) 声明。请注意,(interactive) 是一种特殊的构造,它并不是真正的函数调用,而是一个声明。

(defun load-cenet-files ()
(interactive)
(load-file "~/.emacs.d/cedet/common/cedet.elc")
(require 'semantic-gcc)
)

一旦你把一个函数变成一个命令,你就可以通过 M-x function-name 调用它。此外,如果要将函数绑定(bind)到键盘快捷键,则它必须是命令。后者正是您看到该错误消息的原因:您已将 load-cenet-files 函数绑定(bind)到 C-c p 但它是一个函数,而不是命令.一旦你插入 (interactive) 你应该没问题。

最后,您尝试将此功能绑定(bind)到键盘快捷键似乎有些不寻常。你不能把 load-filerequire 放到你的“.emacs”文件中吗?或者,如果您不希望全局加载文件,请将其附加到 mode-specific hook ?

关于elisp - 在 emacs lisp 中将函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588239/

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