Как преобразовать рубиновый массив в массив C с RubyInline?

Необходимо сказать C#, что объект переопределяет функцию от базового класса.

Вот статья MSDN о синтаксисе, в котором Вы нуждаетесь: http://msdn.microsoft.com/en-us/library/ebca9ah3 (По сравнению с 71) .aspx

public class SadObject: MoodyObject    
{        
    override String getMood()

5
задан 2 revs 13 July 2009 в 16:53
поделиться

2 ответа

Это хорошее изложение того, как получить доступ к объектам Ruby из C: http://rubycentral.com/pickaxe/ext_ruby.html

inline do |builder|
  builder.c "
    static VALUE some_method(VALUE s) {
      int s_len = RARRAY(s)->len;
      int result = 0;

      VALUE *s_arr = RARRAY(s)->ptr;

      for(i = 0; i < s_len; i++) {
        result += NUM2INT(s_arr[i]); // example of reference
      }

      return INT2NUM(result); // convert C int back into ruby Numeric 
    }"
end

Затем в ruby ​​вы можете просто передать значения вроде:

object.some_method([1,2,3,4])

Надеюсь, это вам поможет.

9
ответ дан 18 December 2019 в 14:49
поделиться

Given the code from the above answer, here is the code that will work for Ruby 1.8.6 and 1.9.1:

inline do |builder|
  builder.c "
    static VALUE some_method(VALUE s) {
      int s_len = RARRAY_LEN(s);
      int result = 0;
      int i = 0;

      VALUE *s_arr = RARRAY_PTR(s);

      for(i = 0; i < s_len; i++) {
        result += NUM2INT(s_arr[i]); // example of reference
      }

      return INT2NUM(result); // convert C int back into ruby Numeric 
    }"
end

Hope this helps also :)

4
ответ дан 18 December 2019 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: