什么是Emacs Lisp中的冒号(:)?

5
我不是在谈论关键词变量(那些以冒号为前缀的变量),我说的是仅仅的:。以下是从一个ielm会话中的例子:
ELISP> :
:

看起来这是一个变量,其值为:,这使它有点像shell中的noop(就像在shell中的noop一样)。我只是想知道是否有关于它的任何文档。我无法使用describe-variable查找它...

1
它的值是它本身的原因,这正是它是关键字的事实。 :-) 所有关键字都共享此属性。 - Malabarba
1
@Malabarba:但并非所有自我评估(常量)都是关键字。 - Drew
@Drew 确实如此!很好的补充。 - Malabarba
2个回答

8

:是一个关键字,也就是Lisp符号的一种,其打印名称以“:”开头。它满足谓词keywordp


1
mgalgs:作为对Drew在你自己的答案中评论的补充,请参阅C-h i g (elisp) Constant Variables RET中的解释。 - phils
mgalgs:实际上,该节点是直接从您在问题中提供的URL链接的,因此您可能已经阅读过它。请注意,您经常会看到使用关键字作为“比t更具描述性”的值的代码,其中函数仅调用非nil参数。 - phils

0

看起来这只是一个变量,其值为:我无法通过交互式调用describe-variable来查看它,但我可以使用(describe-variable :)来查找:

:'s value is :

Documentation:
Not documented as a variable.

编辑:不,这不是一个变量。请参见被接受的答案。


1
不是一个变量,是一个符号。是一个关键字符号,不是一个变量。 - nic ferrier
3
一个具有“符号值(symbol-value)”的符号是一个变量,因此你可以说它也是一个变量。然而,它是一个常量符号。请注意,例如,defconst(elisp)定义全局变量中进行了介绍。但是当然,defconst并没有定义一个真正的常量;其值是可以改变的(关于Lisp常量是否应被称为变量是另一个问题)。 - Drew
2
哇,我不同意。值不能被更改。常量定义可以重新评估。常量可以被重新定义。而且我也不同意“:”是一个变量。它是一个自引用符号。 - nic ferrier
@nicferrier - 一个 关键字符号 在其他语言中有对应的平行概念吗?例如,它是否类似于/等同于 Ruby 的 :symbol - ocodo
不确定 Ruby,似乎可能。但关键字只是自引用、内部化的字符串。因此它们的值就是它们的名称。 - nic ferrier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接