环境: 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
原因不明...