作者:
AIGecko (師大貓耳控)
2012-12-22 12:53:08環境: Ruby 1.9.3p194 MinGW32 4.7.1
狀況:
打算在C擴充中取得陣列的長度
底下是程式碼:
VALUE ary=rb_iv_get(self,"@ary");
int size=FIX2INT(RARRAY_LEN(ary));
那個ary裡面是[
[#<SDL::Surface:0x106e0d8>, 96, -96, 1],
[#<SDL::Surface:0x106e0a8>, 0, 0, 10]]
也就兩個陣列 裡面裝了圖片 還有xyz三個數字
不過得到的長度卻是 1
並不是2...
後來改成呼叫函式
rb_funcall(ary,rb_intern("size"),0)
得到的結果是正確的 2
照理說RARRAY_LEN應該和ary.length等價不是嗎?
另外有測:
VALUE ary=rb_ary_new();
rb_ary_push(ary,self);//其實放什麼都沒差別...
printf("test0 %d",FIX2INT(RARRAY_LEN(ary)));
rb_ary_push(ary,rb_ary_new());
printf("test1 %d",FIX2INT(RARRAY_LEN(ary)));
得到的結果是 test0 0test1 1
原因不明...