如何在Ruby中调用方法?
嘿,我的计算两个数组协方差的方法有问题 错误总是存在的: main:对象的未定义方法“kovarianz” 这是我的密码:如何在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
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。。。。