私は C エクステンションを作成しました。その目的は、一連のカードがストレートになるかどうかを判断することです。この例は、問題を示すために必要以上に複雑かもしれませんが、基本的に foo は、評価されたすべてのカード (それぞれに割り当てられたインデックスを持つ) を内部に格納する必要があります。したがって、bar には完全に別個のカードとインデックスのセットが必要です。しかし、カードを bar に割り当て始めると、foo が上書きされているようです。ポインターに問題がある場合に備えて、以下にコードを含めます。
>> require 'ext/straight_count' #=> true
>> foo = EV::StraightCount.new;
>> foo.evaluate(6,0);
>> foo.evaluate(5,1);
>> foo.evaluate(4,2);
>> foo.evaluate(3,3);
>> foo.evaluate(3,4);
>> foo.evaluate(3,5);
>> foo.evaluate(3,6);
>> foo.straight_cards
=> []
>> bar = EV::StraightCount.new;
>> bar.evaluate(11,0);
>> bar.evaluate(10,1);
>> bar.evaluate(9,2);
>> bar.evaluate(8,3);
>> bar.evaluate(7,4);
>> bar.evaluate(2,5);
>> bar.evaluate(2,6);
>> bar.straight_cards
=> [11, 10, 9, 8, 7]
>> foo.evaluate(3,6);
>> foo.straight_cards
=> [11, 10, 9, 8, 7]
.h ファイル
static int *pCards;
static int *pSortedCards[NUM_CARDS];
static int i, rMadeHandIndex, cCards[NUM_CARDS], begin_straight, end_straight;
VALUE rIsFound = Qfalse;
static VALUE EV, StraightCount;
static void reset_score();
static VALUE found();
static VALUE score();
static VALUE straight_cards();