最新版本的 Emacs 支持 elisp 代码中变量的词法绑定。是否也可以在词法上重新定义函数?换句话说,Emacs Lisp 有类似的东西lexical-flet
吗?
问问题
699 次
2 回答
4
在 Emacs<24.3 中,您可以(require 'cl)
然后使用labels
. 在 Emacs-24.3 及更高版本中,您还可以执行(require 'cl-lib)
然后使用cl-flet
or cl-labels
。
所有这些都是“复杂的宏”,它们生成的代码看起来像(let ((fun (lambda (args) (body)))) ... (funcall fun my-args) ...)
,因为底层语言本身并不支持本地函数定义。
于 2012-12-13T01:36:21.817 回答
2
有,labels
但我不知道这是否是你要找的:
(defun foo ()
42)
(defun bar ()
(foo))
(list
(foo)
(bar)
(labels ((foo ()
12))
(list (foo)
(bar)))
(foo)
(bar))
它返回(42 42 (12 42) 42 42)
。
于 2012-12-12T22:11:39.657 回答