如何在Ruby中调用方法?

问题描述:

嘿我有一个问题,我的方法,计算两个数组的协方差。如何在Ruby中调用方法?

总是有错误:

undefined method 'kovarianz' for main:Object

这里是我的代码:

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

请在发布问题前正确格式化并缩进代码。事实上,如果你这样做,你的问题的答案立即变得明显。 – 2012-04-06 17:40:33

方法的名字叫做covariance,但你在最后一行调用kovarianz。改变一个或另一个,你应该是金。

+1

我在上面的评论中暗示了第二个问题。 – 2012-04-06 17:41:26

+0

好的,我做到了。但仍然是相同的错误... – jeffrey 2012-04-06 17:42:30

+0

@JörgWMittag哇,我完全错过了。 :) – 2012-04-06 17:43:10

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

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2) 

希望这有所帮助。

+0

不幸的是...方法中一定有其他错误....但我找不到 – jeffrey 2012-04-06 17:56:22

+0

这是不正确的。他尚未定义类方法,因此Enumerable对象将作为实例方法接收协方差。 – davidcelis 2012-04-06 17:57:13

+0

这就是它....现在它的工作原理...我的计算是错误的,因为结果0.0 ... – jeffrey 2012-04-06 18:02:58

你在做什么有两件事是错误的。首先,你定义了一个Enumerable实例方法,而不是一个类方法。您将无法通过你所操作的数组中,而是,你会打电话给covariance直接在阵列上:

daten_rohstoff1.covariance daten_rohstoff2

因此,应该定义方法只取一个参数,即第二阵列。

其次,如前所述,您已经定义了方法covariance,但正在尝试拨打kovarianz。显然,这是行不通的。