emacs - 在 elisp 中围绕私有(private)函数创建闭包

标签 emacs lisp elisp lexical-closures

在 elisp 中我有以下内容

(setq lexical-binding t)



 (fset 'boom (cl-flet*
               ((tickle ()
                        (message "hi"))
                (pickle ()
                        (tickle)))
             (lambda ()
               (pickle))))
(boom)

当我运行 boom 函数时出现错误

Symbol's value as variable is void: --cl-pickle--

这是怎么回事?

我的意图是我想将私有(private)/辅助函数和变量包装在一个闭包中,这样我就可以更好地组织我的代码,而不是所有的东西都是全局的。

最佳答案

不要(setq lexical-binding t)。您不想执行设置此变量的命令。相反,您想向 Emacs 描述您编写的代码使用词法绑定(bind),为此您需要添加:

-*- lexical-binding:t -*-

文件第一行的某处。

关于emacs - 在 elisp 中围绕私有(private)函数创建闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201217/

相关文章:

elisp - 是否有 Elisp 函数列出给定缓冲区中的标记?

emacs - elisp 中的 lambda 宏

emacs - (defalias 'A (symbol-function ' B)) 和 (defalias 'A ' B) 之间的区别

emacs - emacs 最好的键盘?

emacs - 在 Emacs Shell 模式下显示 TTY

lisp - CLISP 终端错误 : Invalid byte sequence

lambda - 列表应该是一个 lambda 表达式

lisp - 函数中的 setf 不起作用

emacs - 如何在 Emacs 中找到建议功能的 defadvice?

emacs - 在 transient 标记模式下如何在 elisp 中使区域 transient