Function emacs lisp是否支持按词汇重新定义函数?

Function emacs lisp是否支持按词汇重新定义函数?,function,emacs,elisp,lexical-scope,Function,Emacs,Elisp,Lexical Scope,Emacs的最新版本支持elisp代码中变量的词法绑定。也可以用词汇重新定义函数吗?换句话说,Emacs Lisp是否有类似于词法flet?的标签,但我不知道这是否是您要寻找的: (defun foo () 42) (defun bar () (foo)) (list (foo) (bar) (labels ((foo () 12)) (list (foo) (bar))) (foo) (bar)) 它返回EmacsT

Emacs的最新版本支持elisp代码中变量的词法绑定。也可以用词汇重新定义函数吗?换句话说,Emacs Lisp是否有类似于
词法flet

的标签,但我不知道这是否是您要寻找的:

(defun foo ()
  42)

(defun bar ()
  (foo))

(list
 (foo)
 (bar)
 (labels ((foo ()
               12))
   (list (foo)
         (bar)))
 (foo)
 (bar))

它返回EmacsTo me 24.2.1中的
(42 42(12 42)42)
,返回“符号的函数定义无效:标签”
(需要'cl)
。如果您有足够新的版本,请改用
(cl标签…
。docstring表示“这类似于
flet
,只是绑定是词汇性的”。这正是我想要的。谢谢我把这个作为公认的答案,因为它更完整,提供了完整的背景。