6

有些人使用双破折号表示函数可能会更改: 函数名称中的双减号(--)约定在 Emacs Lisp 中是什么意思

包含internal在函数名称中是否意味着类似的事情?

两个例子

where-is-internal
internal-make-var-non-special

该函数where-is-internal具有详细的文档字符串,并且在手册中也有提及。是where-is-internal例外吗?

-internal作为后缀和internal-作为前缀有区别吗?

更令人困惑的是,还有以internal--(带双破折号)作为前缀的函数名称。

4

2 回答 2

6

混淆不仅仅在于命名约定(由于历史而引起的可变性,也许有时是一时兴起)。混淆在于自由软件中“内部”的概念,其中源代码对所有人开放,可以随意使用或修改(甚至分叉)。

从(我认为是)Emacs Dev 的角度回答您的问题,因此就潜在意图而言:“内部”意味着使用这种功能的人可能更有可能在 Emacs 中遇到未来的变化-该功能的开发实现和使用可能比非“内部”功能的情况。IOW,您可能不想指望它保持现在的状态。就这样。

但是里面有很多“也许”、“更有可能”和“可能”。在实践中,一些非“内部”功能的变化比一些“内部”功能更彻底或更快。对于前者,可能会有一个弃用宽限期,在此期间,更改前的情况是可以容忍的,即仍然有效。对于“内部”的东西,情况可能并非如此。但同样,实际上在“内部”的黑色和非“内部”的白色之间存在一些灰色。

来自 Emacs Dev(例如@Stefan)的某个人可能会提出不同的看法或纠正我的解释。

我自己的看法:有时(经常)有一些函数和变量作者不希望用户直接使用,因此很自然地被认为是“内部的”,但用户仍然很好地使用了它们,甚至“有" 使用(模重写大量代码)。其中一些已经删除了他们的“内部”状态(不,我没有记住示例)。或者有时添加了一个新的、非“内部”函数以使行为可用——例如,添加了一个包装器或函数值参数(同样,我没有临时示例可提供)。

IOW,对于 Emacs Dev 来说,也不总是清楚什么应该被视为“内部”。只需将标签作为一个标志,您可能不想在该函数或变量上计算太多。

Wrt 各种符号:我的印象是该--约定最近似乎被更多地使用(尽管也有一些旧代码使用它);在大多数情况下,使用internal是一个较旧的约定。

于 2013-09-15T15:20:47.107 回答
5

“内部”和“--”约定是相似的。基本上,“内部”在没有前缀后放置双破折号时使用(这通常是用 C 实现的函数的情况)。

是的,正如 Drew 解释的那样,“内部”概念背后的意图只是建议人们不要直接使用它。IOW 如果他们需要相应的功能,他们应该报告一个错误,请求将其状态提升为“非内部”。

于 2013-09-16T02:12:12.693 回答