Emacs 什么';变量和符号的根本区别是什么?

Emacs 什么';变量和符号的根本区别是什么?,emacs,elisp,Emacs,Elisp,我对此相当困惑 它们之间的关系是什么(例如,如何在另一个上下文中使用一个)?非常感谢 符号的概念有点难理解。(甚至我也不确定我是否得到了:)) 您可以将符号视为行为类似于常量的特殊变量。内存中只有一个实例,不管您使用它的频率有多高 这样做的好处是节省内存,可以看出值是否以类似常量的方式使用。(提高代码可读性) 您可以在C/C++中使用typdef,在Java中使用static final或在Delphi/Pascal/VB中使用const执行类似的操作,但请注意,在这些语言和许多其他语言中,“s

我对此相当困惑


它们之间的关系是什么(例如,如何在另一个上下文中使用一个)?非常感谢

符号的概念有点难理解。(甚至我也不确定我是否得到了:))

您可以将符号视为行为类似于常量的特殊变量。内存中只有一个实例,不管您使用它的频率有多高

这样做的好处是节省内存,可以看出值是否以类似常量的方式使用。(提高代码可读性)

您可以在C/C++中使用
typdef
,在Java中使用
static final
或在Delphi/Pascal/VB中使用
const
执行类似的操作,但请注意,在这些语言和许多其他语言中,“symbol”的含义不同

是什么

符号基本上只是一个具有四个字段的对象:

  • 名称(字符串)
  • 值(某些Lisp对象)
  • 函数(某些Lisp对象),以及
  • 属性列表(通常是交替关键字/值对的列表)
符号的特殊之处在于,通常只有一个具有给定名称的符号,而该符号是通过名称来表示的。这使得符号成为按名称调用数据(即实现变量)的便捷方式。(变量的值存储在值槽中。)

类似地,函数由名称引用,函数的定义存储在符号的函数槽中。这意味着可以有具有相同名称的不同函数和变量


属性列表被用作将附加值与特定名称关联的更通用的机制,并且名称空间再次独立于函数和变量名称空间。

简单地说,变量是符号和值之间的绑定。符号是变量的名称。计算绑定符号(即变量名)时,返回变量值

您还可以使用非变量的符号,即未绑定到值的名称。但不能计算未绑定的符号

在Lisp-2中,符号可以同时绑定到值和函数,上下文定义计算符号的结果是值还是函数