1
我創建了一個C擴展,其目的是確定一系列卡是否會導致筆直或不筆直。這個例子可能比展示這個問題所需的更復雜一點,但是本質上foo應該在其內部存儲所有評估過的卡片(每個卡片都有一個指定的索引)。所以酒吧應該有一套完全獨立的牌和索引。但是,似乎當我開始將卡分配給酒吧時,它正在覆蓋foo。我會在下面列出我的代碼,以防我使用指針做錯了事情。爲什麼我的C擴展沒有創建唯一的實例?
>> 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();
我不明白,我包括我的.h文件,這些變量是如何全局的? –
因爲這就是它們。 :) – Arafangion
好吧,我做了一些閱讀,發現在.h文件中聲明的任何內容都是全局的。不知道這一點。謝謝。 –