2012-09-17 82 views
11

我有興趣在爲C中的ruby編寫擴展時遵循正確的命名約定。具體而言,我指的是將_p添加到謂詞和前綴變量的函數名稱,模塊爲mc for class etc.Ruby C擴展開發人員的命名約定

例如,如果我們想要在C中定義類似下面的謂詞方法,我們應該在定義該方法的函數中使用_p作爲後綴。

class MyClass 
    def awesome? 
    true 
    end 
end 

在C:

static VALUE my_extension_my_class_awesome_p(VALUE self) { 
    return Qtrue; 
} 

void Init_my_extension(void) { 
    VALUE cMyClass = rb_define_class("MyClass", rb_cObject); 

    rb_define_method(cMyClass, 
        "awesome?", 
        my_extension_my_class_awesome_p, 
        0); 
} 

通過核心Ruby源代碼我看到_p(謂語)和_m後綴,這我無法從推斷的意義看。我相信還有其他一些公約。

還有其他命名約定,例如何時使用下劃線以及何時使用駱駝套管。在編寫具有大量C代碼的擴展時,如果沒有遵循指南,很容易造成混亂。

是否有確切的清單?在搜索Ruby C擴展主題時,我似乎從未找到有用的結果。任何顯示純Ruby語法和正確命名的C函數的快速示例?

+0

我猜_m是方法的後綴。 – Linuxios

+0

我假設你使用英文而不是日文寫的指南,對不對? >< –

+0

@AndrewGrimm有一篇用日文寫的令人敬畏的指南,有一些部分工作將其翻譯成英文(http://rhg.rubyforge.org/),但是,很狡猾:) – d11wtq

回答

5

這裏有一對夫婦:http://geoffgarside.co.uk/2007/05/20/ruby-c-extensions-nested-modules-classes/

傑夫加塞德有寫在紅寶石/ C一對夫婦幾十回購。他是非常可信的IMO。 https://github.com/geoffgarside

我會繼續尋找更多,並編輯這篇文章,當我找到更多。

編輯

看起來很難找到誰願意談論Ruby擴展命名約定...也許你可以嘗試發送M中加賽德的方向鳴叫/電子郵件。他在twitter上看起來非常活躍。

+1

這很有用,謝謝。如果沒有更明確的答案出現,我會獎勵你。 – d11wtq