2013-09-24 24 views
3

在emacs中,標記程序包命名空間的典型方法是選擇 (最好是短)應用於與 程序包相關的所有符號;爲了表明功能被認爲是「僅使用內部的 」,並且不應該直接用在封裝外部,最常見的對流似乎是prefix--functionname,或者當功能需要非常簡單的子功能時,例如, prefix-functionname-1Emacs lisp命名空間和內部函數約定

但是,我還經常需要一些「子包裝」,例如,當一個包 包含幾個公用函數時,我已將其拆分爲 不重疊的子函數。是否有約定是否喜歡

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 

,所以我想知道是否有可能是一個更好的慣例亞比單連字符- 定界符發現 自己。

+0

我不確定這恰恰是重複的,但以下問題只在幾天前,並肯定重疊:http://stackoverflow.com/questions/18812352/what-does-internal-mean-in - 功能 - 名稱 - 中 - 與Emacs口齒不清,與http://stackoverflow.com/questions/3180390/what-does-the-double-minus-convention-in-function-names-mean-in-emacs-lisp沿這已經提到過了。 – phils

回答

4

冒號作爲符號分隔符通常是不鼓勵的(它使得它更難於load emacs lisp into common lisp,並且可能會影響未來的emacs lisp包系統)。

雙破折號(連字符)--用於表示the symbol is internal的包裝。

因此目前接受的做法是package-external-symbolpackage--internal-symbol

官方Emacs Lisp Coding Conventions頁面不談論這個問題的細節,只是規定:

你應該選擇一個短字,以區別於其他 Lisp程序程序。程序中所有全局變量,常量和 函數的名稱應以該選定的前綴開頭。 用連字符' - '分隔名稱其餘部分的前綴。 練習有助於避免名稱衝突,因爲Emacs Lisp中的所有全局變量共享相同的名稱空間,並且所有函數共享另一個名稱空間 。

+1

因此,在命名空間內構造名稱沒有任何約定?我還注意到'org-mode',特別是'org-babel'引入了許多包含冒號的符號;大多是語言特定的功能實現,例如'ORG-巴貝爾-執行:C++'。 – kdb

2

這是沒有公認的約定。我個人傾向於使用「pkgname-sub-internal」而不是「pkgname - sub-internal」,可能是因爲我不太關注函數/變量的排序方式。