2013-04-02 43 views
6

我正在爲Rebol 3(posix/fann/math)做一些擴展。Rebol,擴展和函數命名

爲了避免全局名稱空間污染,我使用簡單的前綴源標識符導出函數。例如:POSIX-FORK代表forkPOSIX-NANOSLEEP代表nanosleep

有沒有更好的方法或官方Rebol命名約定?

回答

6

這是一個非常標準的Rebol導出命名約定,儘管它們在代碼中應該是小寫。所有大寫事物只是在提到聊天客戶端或網站中不能顯示代碼的功能時的命名約定,如this。除非用於別的東西,否則通常不會在Rebol代碼中大寫任何單詞。

但是,如果要避免全局命名空間污染,請使用options: [private]標頭聲明擴展模塊。這將使得你的模塊的導出只能由模塊或腳本導入,這些模塊或腳本明確要求它們使用importneeds標題。這尤其適用於導出低級C類API的模塊或擴展,這些API只能由實現高級包裝的模塊導入。最好記住擴展模塊的一部分是一個完整的Rebol模塊,通常最好是將高級包裝代碼放在那裏,而不是導出類C函數,並保留它們供內部使用。

另一個竅門是,當您導出常量或枚舉值時,最好將它們放入模塊中的對象,然後導出對象。這樣你就不會輸出到全局命名空間,你可以保護單詞不被修改。

另一個訣竅是根本不導出東西,並讓人們使用import函數導入模塊。除非您將模塊的文字標記爲隱藏,否則即使未將其導出也仍然可用。儘管這在大多數情況下有點不方便,所以最好使用私有模塊。您也可以導出您的高級API和而不是導出您的低級API,因此如果有人想使用它,則可以導入低級API。

入住這裏瞭解如何模塊和擴展使用更完整的答案:How are words bound within a Rebol module?

+0

謝謝你澄清,你的鏈接寫得很好看。 – TomBon