如何在Ruby中调用方法?

如何在Ruby中调用方法?,ruby,methods,Ruby,Methods,嘿,我的计算两个数组协方差的方法有问题 错误总是存在的: main:对象的未定义方法“kovarianz” 这是我的密码: rohstoff1 = "Eisen" rohstoff2 = "Neodym" daten_rohstoff1 = [1,2,3,4,5,6] daten_rohstoff2 = [10,11,15,16,17,18] module Enumerable def mean m = self.reduce(:+) / self.length.to_f

嘿,我的计算两个数组协方差的方法有问题

错误总是存在的:

main:对象的未定义方法“kovarianz”

这是我的密码:

rohstoff1 = "Eisen"
rohstoff2 = "Neodym"

daten_rohstoff1 = [1,2,3,4,5,6]
daten_rohstoff2 = [10,11,15,16,17,18]

module Enumerable
  def mean
    m = self.reduce(:+) / self.length.to_f
    return m
  end

  def covariance (dat1,dat2)
    kovar = dat1.inject(0) { |sum, x| sum + (x-dat1.mean) } *
    dat2.inject(0) { |sum, x, i| sum + (x-dat2.mean) } / dat1.length.to_f
    return kovar
  end
end

puts "Kovarianz von #{rohstoff1} und #{rohstoff2} = " +
covariance(daten_rohstoff1,daten_rohstoff2)

方法名称称为
convariance
,但在最后一行中调用
kovarianz
。更改一个或另一个,您应该是金色的。

方法名称称为
协方差
,但您在最后一行中调用
kovarianz
。改变一个或另一个,你应该是金色的。

好吧,这里的主要问题是你称之为kovarianz,与协方差相反,但代码也嵌入到模块中这一事实意味着你必须这样称呼它:

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)

希望这能有所帮助。

好吧,这里的主要问题是您调用了kovarianz,而不是协方差,但是代码也嵌入到模块中这一事实意味着您必须这样调用它:

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)

希望这有帮助。

你所做的有两件事是错误的。首先,您定义了一个可枚举实例方法,而不是类方法。您不会传入正在操作的数组,而是直接在数组上调用
协方差


daten_rohstoff1.协方差daten_rohstoff2

因此,您应该将该方法定义为只接受一个参数,即第二个数组


第二,正如前面提到的,您已经定义了一个方法
convariance
,但是正在尝试调用
kovarianz
。这显然是行不通的。

你所做的有两件事是错误的。首先,您定义了一个可枚举实例方法,而不是类方法。您不会传入正在操作的数组,而是直接在数组上调用
协方差


daten_rohstoff1.协方差daten_rohstoff2

因此,您应该将该方法定义为只接受一个参数,即第二个数组


第二,正如前面提到的,您已经定义了一个方法
convariance
,但是正在尝试调用
kovarianz
。这显然不起作用。

在发布问题之前,请正确设置代码格式并缩进。事实上,如果你这样做,你的问题的答案会立即变得显而易见。在发布问题之前,请正确地格式化和缩进你的代码。事实上,如果你这样做,你的问题的答案马上就显而易见了。还有第二个问题,我在上面的评论中暗示了这一点。@JörgWMittag哇,我完全没有注意到这一点。:)我在上面的评论中暗示了第二个问题。@JörgWMittag哇,我完全没有注意到这一点。:)不幸的是,没有……这个方法肯定还有其他错误……但我找不到这是错误的。他没有定义类方法,所以可枚举的对象将作为实例方法接收协方差。就是这样……现在它工作了……我的计算是错误的,因为结果是0.0……不幸的是没有……方法中肯定还有其他错误……但我找不到这是错误的。他没有定义类方法,所以可枚举的对象将作为实例方法接收协方差。就是这样…现在它工作了…我的计算是错误的,因为结果是0.0。。。。