[英]How do I access a ruby array from my c extension?
我收到這個錯誤
ev.c:11: error: subscripted value is neither array nor pointer
對於這條線
printf("%d\n", pairs[0][0]);
在這段代碼中
static VALUE EV;
static VALUE PairCounter;
static VALUE
sort_pairs_2(VALUE self) {
VALUE pairs;
pairs = rb_ivar_get(self, rb_intern("pairs"));
printf("%d\n", pairs[0][0]);
return Qnil;
}
void Init_ev() {
rb_eval_string("require './lib/ev/pair_counter'");
VALUE PairCounter = rb_path2class("EV::PairCounter");
rb_define_method(PairCounter, "sort_pairs_2", sort_pairs_2, 0);
}
我是否使用了不正確的self,並且rb_ivar_get實際上沒有指向PairCounter類?
我很確定您需要pairs
使用RARRAY_PTR
宏才能到達底層數組; 例如,Array#push(對於1.9.2)的內部實現如下所示:
static VALUE
rb_ary_push_1(VALUE ary, VALUE item)
{
long idx = RARRAY_LEN(ary);
if (idx >= ARY_CAPA(ary)) {
ary_double_capa(ary, idx);
}
RARRAY_PTR(ary)[idx] = item;
ARY_SET_LEN(ary, idx + 1);
return ary;
}
if
只是整理出所有必要的調整大小,則可以使用RARRAY_PTR(ary)[idx]
訪問數組中的單個插槽。
我沒有任何官方參考來支持此操作,但希望這會有所幫助。
Ruby數組是使用rb_函數訪問的-與普通的C數組不同。
使用rb_ary_entry
VALUE rb_ary_entry(VALUE self, long index")
在
index
處返回數組self
的元素。
參考:
http://ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html
請參閱“常用方法”下的常見數組函數列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.