在elisp中围绕私有函数创建闭包

jac*_*cob 3 lisp emacs elisp lexical-closures

在elisp我有以下内容

(setq lexical-binding t)



 (fset 'boom (cl-flet*
               ((tickle ()
                        (message "hi"))
                (pickle ()
                        (tickle)))
             (lambda ()
               (pickle))))
(boom)
Run Code Online (Sandbox Code Playgroud)

当我运行动臂功能时,我得到了错误

Symbol's value as variable is void: --cl-pickle--
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

我的意图是我想在一个闭包中包装私有/辅助函数和变量,这样我可以更好地组织我的代码而不是全局的一切.

Ste*_*fan 5

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

-*- lexical-binding:t -*-
Run Code Online (Sandbox Code Playgroud)

在文件的第一行的某个地方.