3

在 emacs 中,标记包命名空间的典型方法是选择一个(最好是短的)前缀应用于与包相关的所有符号;为了表明一个函数被认为是“仅供内部使用”并且不应该直接在包之外使用,最常见的约定似乎是prefix--functionnameand,或者当一个函数需要一个非常简单的子函数时,例如 prefix-functionname-1.

但是,我也经常需要某种“子包”,例如,当一个包包含几个我已拆分为不重叠子功能的公共函数时。是否有约定

mypkg-list-all
mypkg-list-all--filter-list
mypkg-list-all--fontify-buffer 
mypkg-list-all-public-subfunction

或者

mypkg--list-all-filter-list
mypkg--list-all-fontify-buffer
mypkg-list-all
mypkg-list-all-public-subfunction

?

直觉上我发现第一个版本更好,因为--这里也充当一种“子包”分隔符,并将最密切相关的函数组合在完成缓冲区中。可悲的是,它导致内部函数列在同一层次结构级别的公共函数之前,这让我质疑该约定。

对此是否有任何约定,或者只是“每个人都想要”?

此外,在许多情况下,特别是当函数的“完全限定”名称变得冗长时,单词和包分隔符之间缺乏区别会让人感觉有点问题。我个人发现自己使用命名约定,如

mypkg-view-mode
mypkg-view-mode:mouse-action
mypkg-view-mode:keyboard-action 

所以我想知道子组分隔符是否有比单个连字符更好的约定-

4

2 回答 2

4

通常不鼓励将冒号作为符号分隔符(这使得将emacs lisp 加载到 common lisp中变得更加困难,并且可能会干扰未来的 emacs lisp 包系统)。

双破折号(连字符)--用于表示该符号在包的内部。

因此,目前公认的做法是package-external-symbolpackage--internal-symbol

官方的Emacs Lisp Coding Conventions页面并没有详细讨论这个问题,只是指定:

您应该选择一个简短的词来区分您的程序与其他 Lisp 程序。程序中所有全局变量、常量和函数的名称都应以所选前缀开头。用连字符“-”将前缀与名称的其余部分分开。这种做法有助于避免名称冲突,因为 Emacs Lisp 中的所有全局变量共享相同的名称空间,并且所有函数共享另一个名称空间。

于 2013-09-24T14:52:12.740 回答
2

对此没有公认的约定。我个人倾向于使用“pkgname-sub--internal”而不是“pkgname--sub-internal”,可能是因为我不太关注函数/变量的排序方式。

于 2013-09-24T15:25:17.017 回答