emacs lisp中的代码:
(defun test-sub-fun-var()
(message "SUB test-sub-fun-var: my-local-var: %s" my-local-var)
)
(defun test-main()
(message "\nSTART test-main")
(let
(
(my-local-var)
)
(setq my-local-var "MY LOCAL VARIABLE VALUE")
(message "MAIN my-local-var: %s" my-local-var)
(test-sub-fun-var)
)
(message "FINISH test-main")
)
(test-main)
当运行功能" test-main"我们有结果:
START test-main
MAIN my-local-var:MY LOCAL VARIABLE VALUE
SUB test-sub-fun-var:my-local-var:MY LOCAL VARIABLE VALUE
FINISH test-main
正如您所看到的,函数" test-sub-fun-var"可以访问变量" my-local-var "在函数" test-main"中声明。但我需要功能" test-sub-fun-var"无法访问变量" my-local-var "。我怎么能这样做?感谢。
答案 0 :(得分:0)
您没有说明您使用的是什么版本的Emacs。在24.1之前,没有办法做你想做的事,你只需要小心。但是,引用最新版本的信息手册(26.0.50.1):
11.9.3词汇绑定
词汇绑定作为可选功能引入Emacs中 版本24.1。 [...] 词汇绑定变量具有“词法范围”,意味着任何 对变量的引用必须以文本方式定位在绑定中 构造
您可以使用文件局部变量lexical-binding
在每个文件的基础上启用词法绑定。所以,
;; -*- lexical-binding:t -*-
(defun test-sub-fun-var()
(message "SUB test-sub-fun-var: my-local-var: %s" my-local-var))
(defun test-main()
(message "\nSTART test-main")
(let ((my-local-var))
(setq my-local-var "MY LOCAL VARIABLE VALUE")
(message "MAIN my-local-var: %s" my-local-var)
(test-sub-fun-var))
(message "FINISH test-main"))
(test-main)
现在你的输出是:
START test-main
MAIN my-local-var: MY LOCAL VARIABLE VALUE
test-sub-fun-var: Symbol’s value as variable is void: my-local-var