在 emacs 中,标记包命名空间的典型方法是选择应用于与包;为了表明一个函数被认为是"内部的仅使用",不应直接在包外使用最常见的贪婪似乎是prefix--functionname
和,或者什么时候一个函数需要一个非常简单的子函数,例如 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
所以我想知道是否有更好的子组约定分隔符比单个连字符-
.
鼓励使用冒号作为符号分隔符(这使得将 Emacs Lisp 加载到 Common Lisp 中变得更加困难,并且可能会干扰未来的 Emacs Lisp 包系统(。
双破折号(连字符(--
用于指示符号是包裹内部的。
因此,目前接受的做法是package-external-symbol
和package--internal-symbol
。
官方的 Emacs Lisp 编码约定页面没有详细讨论这个问题,只是指定:
您应该选择一个简短的单词来区分您的程序与其他程序 Lisp 程序。所有全局变量、常量和 程序中的函数应以所选前缀开头。 用连字符"-"将前缀与名称的其余部分分开。这 练习有助于避免名称冲突,因为所有全局变量 Emacs Lisp共享相同的名称空间,所有函数共享另一个 命名空间。
这个没有公认的约定。 我个人倾向于使用"pkgname-sub--internal"而不是"pkgname--sub-internal",可能是因为我不太关注函数/变量的排序方式。