11

Ruby の拡張機能を C で書くときに、正しい命名規則に従うことに興味があります。具体的には_p、関数名に述語を追加したり、変数の前にmfor module やcfor class などを付けたりすることを参照しています。

たとえば、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(predicate) と_mのサフィックスがあり、意味を推測できません。他にもたくさんの慣習があると思います。

アンダースコアを使用する場合やキャメルケースを使用する場合など、追加の命名規則があります。かなりの量の C コードを含む拡張機能を作成する場合、従うべきガイドラインがなければ混乱を招きやすいでしょう。

どこかに決定的なリストはありますか?Ruby C 拡張機能のトピックをグーグル検索しても、有用な結果が得られることはありません。純粋な Ruby 構文と、正しく名前が付けられた同等の C 関数を示す簡単な例はありますか?

4

1 に答える 1

5

さらにいくつかあります:http://geoffgarside.co.uk/2007/05/20/ruby-c-extensions-nested-modules-classes/

Geoff Garside は ruby​​/C で書かれた数十のリポジトリを持っています。彼はかなり信頼できる IMO です。https://github.com/geoffgarside

もっと探し続けて、もっと見つけたらこの投稿を編集します。

編集

ruby 拡張機能の命名規則について話したい人を見つけるのは難しいようです... M. Garside の指示でツイート/メールを送ってみてください。彼 はTwitterで かなり 活発 に 見え ます.

于 2012-09-23T08:47:31.657 に答える