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

问题描述 投票:0回答:3

我对此很困惑。

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

emacs elisp
3个回答
4
投票

这是您要找的吗

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

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

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

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

简单来说,变量是符号和值之间的绑定。符号是变量的名称。当评估绑定符号(即变量名)时,将返回变量值,

1
投票
您还可以使用不是变量的符号,即。不绑定到值的名称。但您无法评估未绑定的符号。

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

符号的概念有点难以理解。 (即使我不确定我是否明白了:))

0
投票
您可以将符号视为特殊变量,其行为类似于常量。无论您使用多少次,内存中都只有一个实例。

好处是节省内存,并且可以查看某个值是否以类似常量的方式使用。 (提高代码可读性)

您可以在 C/C++ 中使用

typdef

执行

类似的操作,在 Java 中使用 static final

 或在 Delphi/Pascal/VB 中使用 
const
 执行
类似
的操作,但要小心,在这些语言和许多其他语言中,“符号”意味着某种东西不同的。 

© www.soinside.com 2019 - 2024. All rights reserved.