如何在Ruby中调用方法?

时间:2012-04-06 17:38:33

标签: ruby methods

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

始终存在错误:

  

主要的未定义方法'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)

3 个答案:

答案 0 :(得分:3)

你正在做的事情有两个问题。首先,您已经定义了一个Enumerable实例方法,而不是一个类方法。您不会传入正在操作的数组,而是直接在数组上调用covariance

daten_rohstoff1.covariance daten_rohstoff2

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

其次,如前所述,您已定义方法covariance但正在尝试调用kovarianz。显然,这不起作用。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

嗯,这里的主要问题是你调用kovarianz而不是协方差,但代码也嵌入模块的事实意味着你必须像这样调用它:

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)

希望这会有所帮助。