Emacs 如何处理对elisp中变量的引用?

Emacs 如何处理对elisp中变量的引用?,emacs,elisp,Emacs,Elisp,我正在编写一个函数,我想对多个不同的全局变量之一(在本例中为全局标记列表、缓冲区标记列表或任意标记列表)进行操作。由于该函数是从列表菜单函数调用的,因此我需要将引用存储在缓冲区局部变量中,以供以后访问 处理这件事的最好方法是elisp?查看手册时,提到了defvaralias和间接变量,但这似乎更多地是为永久性全局别名而不是临时引用而设置的。我是否遗漏了一些微妙的lisp,这意味着这应该非常简单?将变量的名称保存为符号,并使用符号值或eval 许多动态语言都有eval将变量名称保存为符号,并使用

我正在编写一个函数,我想对多个不同的全局变量之一(在本例中为全局标记列表、缓冲区标记列表或任意标记列表)进行操作。由于该函数是从列表菜单函数调用的,因此我需要将引用存储在缓冲区局部变量中,以供以后访问


处理这件事的最好方法是elisp?查看手册时,提到了defvaralias和间接变量,但这似乎更多地是为永久性全局别名而不是临时引用而设置的。我是否遗漏了一些微妙的lisp,这意味着这应该非常简单?

将变量的名称保存为符号,并使用
符号值
eval


许多动态语言都有
eval
将变量名称保存为符号,并使用
符号值
eval


许多动态语言在Emacs的主干中都有
eval

(将成为24.4)您还可以使用
gv-ref
gv-deref
,这两种语言的工作原理分别类似于C的
&
*

在Emacs的主干中(将成为24.4)您还可以使用
gv-ref
gv-deref
,其工作原理分别类似于C的
&
*

如果您可以使用
符号值
而不是
eval
,请不要使用
eval
。有点像,如果你能用勺子做得很好,不要用推土机。当我想更改变量指向的实际值时,我该怎么做?如果你可以使用
符号值而不是
eval
,请不要使用
eval
。有点像,如果你能用勺子做得很好,不要用推土机。当我想改变变量指向的实际值时,我该怎么做?在24.4中引入这些新方法的理由是什么?特别是如果已经有实现这一点的方法,这些函数使用“广义变量”来访问和操作任意存储位置,而不仅仅是符号的可变单元。本质上,这些函数泛化了setf和相关函数,以支持任意类型,包括但不限于CL结构或EIO对象。添加gv-(de)ref
有几个动机:一个原因是它们不仅适用于变量,而且适用于任何泛化变量(又名左值,或可设置字段),另一个是
set
symbol value
只对动态范围的变量有效,而对词汇范围的变量无效。在24.4中引入这些新方法的理由是什么?特别是如果已经有实现方法的话?@stsquand这些函数可以使用“广义变量”用于访问和操作任意存储位置,而不仅仅是符号的可变单元。本质上,这些函数广义化了
setf
和支持任意类型的相关函数,包括但不限于CL结构或EIO对象。添加
gv-(de)有几个动机ref
:一个原因是它们不仅适用于变量,还适用于任何通用变量(也称左值或可设置字段),另一个是
set
symbol value
只对动态范围的变量起作用,而对词汇范围的变量不起作用。看起来我想得太多了,只能简单地引用列表。看起来我想得太多了,只能简单地引用列表。