Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C RubyLine将值数组从一个函数传递到另一个函数_C_Ruby - Fatal编程技术网

C RubyLine将值数组从一个函数传递到另一个函数

C RubyLine将值数组从一个函数传递到另一个函数,c,ruby,C,Ruby,我试图将一个ruby数组从一个C函数传递到另一个C函数,但我一直得到以下错误 error: too few arguments to function ‘c_sum’ 这是我的密码 require 'inline' class ArrayMath inline do |builder| builder.c_singleton " static VALUE c_sum(VALUE arr){ double result = 0; long i, len = RAR

我试图将一个ruby数组从一个C函数传递到另一个C函数,但我一直得到以下错误

error: too few arguments to function ‘c_sum’
这是我的密码

require 'inline'

class ArrayMath


inline do |builder|

builder.c_singleton "
    static VALUE c_sum(VALUE arr){
    double result = 0;
    long i, len = RARRAY_LEN(arr);
    VALUE *c_arr = RARRAY_PTR(arr);

    for(i=0; i<len; i++) {
      result += NUM2DBL(c_arr[i]);
    }

return rb_float_new(result);
}"

builder.c_singleton "
static VALUE c_avg(VALUE arr){
    double sum, result, len = RARRAY_LEN(arr);

    // c_sum returns a ruby float
    sum = NUM2DBL(c_sum(arr));

    result = sum / len;

    return rb_float_new(result);
}"  

end


class << self
    alias sum c_sum
    alias avg c_avg
end
end
要求“内联”
类数组
内联do |生成器|
builder.c_singleton“
静态值c_和(值arr){
双结果=0;
长i,len=RARRAY_len(arr);
值*c_arr=RARRAY_PTR(arr);

对于(i=0;i我决定稍微改变一下。下面是我如何使事情正常工作的

我在/lib文件夹中创建了一个名为array_math.rb的文件(我在rails应用程序中使用它),该文件使用

    config.after_initialize do
      require "#{Rails.root}/lib/arr_math.rb"
    end
这是array_math.rb

class Array
require 'inline'

inline do |builder|
  builder.c <<-EOC
        static VALUE 
        rb_ary_sum(){
            double result = 0;
            long i, len     = RARRAY_LEN(self);
            VALUE *c_arr    = RARRAY_PTR(self);

    for(i=0; i<len; i++) {
      result += NUM2DBL(c_arr[i]);
    }

            return rb_float_new(result);
        }
    EOC


    builder.c <<-EOC
        static VALUE 
        rb_ary_avg(){
            double result = 0;
            double sum, len = RARRAY_LEN(self);

            sum = NUM2DBL( rb_ary_sum(self) );

            result =  sum/len;
            return rb_float_new(result);
        }           

EOC
end

def sum
    rb_ary_sum
end

def avg 
    rb_ary_avg
end 

end

我决定做些改变。以下是我如何让事情运转起来的

我在/lib文件夹中创建了一个名为array_math.rb的文件(我在rails应用程序中使用它),该文件使用

    config.after_initialize do
      require "#{Rails.root}/lib/arr_math.rb"
    end
这是array_math.rb

class Array
require 'inline'

inline do |builder|
  builder.c <<-EOC
        static VALUE 
        rb_ary_sum(){
            double result = 0;
            long i, len     = RARRAY_LEN(self);
            VALUE *c_arr    = RARRAY_PTR(self);

    for(i=0; i<len; i++) {
      result += NUM2DBL(c_arr[i]);
    }

            return rb_float_new(result);
        }
    EOC


    builder.c <<-EOC
        static VALUE 
        rb_ary_avg(){
            double result = 0;
            double sum, len = RARRAY_LEN(self);

            sum = NUM2DBL( rb_ary_sum(self) );

            result =  sum/len;
            return rb_float_new(result);
        }           

EOC
end

def sum
    rb_ary_sum
end

def avg 
    rb_ary_avg
end 

end