arr=Array.new(3)
arr[0]=5
arr[1]=3
arr[2]=2
这些行应该调用根据该该功能,https://github.com/ruby/ruby/blob/trunk/array.c#L568,http://www.ruby-doc.org/core-1.9.3/Array.html我如何访问C中的红宝石数组的值? (编辑array.c:从红宝石源代码rb_ary_initialize)
因此,我已加入几行有显示数组的值的。但是我没有得到预期的结果。
else {
memfill(RARRAY_PTR(ary), len, val);
ARY_SET_LEN(ary, len);
int i;
int result;
result = 0;
VALUE *s_arr = RARRAY_PTR(ary);
for(i = 0; i < len; i++) {
result = LONG2NUM(s_arr[i]);
printf("r: %d\n",result);
}
}
我得到的结果是这样的:
arr=Array.new(3)
arr[0]=5
arr[1]=3
arr[2]=2
r: 9
r: 9
r: 9
为什么是这样的结果?为什么是9?
我按照这些来解决这个问题:
- How to convert ruby array to C array with RubyInline?
- https://github.com/ruby/ruby/blob/trunk/README.EXT#L131
- https://github.com/ruby/ruby/blob/trunk/include/ruby/ruby.h#L708
- https://github.com/ruby/ruby/blob/trunk/include/ruby/ruby.h#L731
谁能请帮助显示红宝石阵/ printf的价值在C?
使用NUM2LONG,我得到这个,'t.rb:3:在初始化':从t.rb在新 \t:从零的隐式转换为整数(类型错误)从t.rb \t:3 3 :' –
shibly
@prime:我不知道't.rb'的第三行是什么。 –
@prime:这个错误可能来自'numeric.c'中的'rb_num2long',并且意味着您试图在Ruby'nil'值上使用'NUM2LONG'。你确定你没有跑出阵列末端或类似的东西吗? –