为什么我创建这个类方法的Ruby代码不起作用?

为什么我创建这个类方法的Ruby代码不起作用?,ruby,class,methods,nomethoderror,Ruby,Class,Methods,Nomethoderror,Ruby n00b试图创建一个简单的方法来添加到Array类中,但是有相当大的困难。我试图编写一个方法,它不仅返回整数数组的最大值,还返回它出现的索引。这是我的密码: class Array def self.maxplus(matrix) i = 0 maximum = 0 while i < matrix.length-1 if matrix[i] > maximum

Ruby n00b试图创建一个简单的方法来添加到Array类中,但是有相当大的困难。我试图编写一个方法,它不仅返回整数数组的最大值,还返回它出现的索引。这是我的密码:

class Array
    def self.maxplus(matrix)
        i = 0
        maximum = 0
        while i < matrix.length-1
            if matrix[i] > maximum
                maximum = matrix[i]
                index = i
            end
            i += 1
        end
        puts index
        puts maximum
    end
end

我不知所措,一段时间以来一直试图在电脑上解决这个问题。非常感谢您的帮助和教育。

您已经为
数组
类定义了一个静态方法,即
数组.maxplus(matrix)
,但是您试图在
数组的实例上调用它。所以,要么这样称呼它:

Array.maxplus(matrix)
或者将其作为实例方法:

class Array
    def maxplus
        i = 0
        maximum = 0
        while i < self.length-1
            if self[i] > maximum
                maximum = self[i]
                index = i
            end
            i += 1
        end
        puts index
        puts maximum
    end
end

[1, 2, 3].maxplus
类数组
def maxplus
i=0
最大值=0
而我最大值
最大值=自身[i]
指数=i
结束
i+=1
结束
卖出指数
最大化
结束
结束
[1,2,3].maxplus

您确定正在调用
数组上的
maxplus
?或者这是
数组的一个实例
?好吧,我可能真的很困惑。我希望能够创建自己的方法来调用任何返回最大值和索引的数组。i、 例如,如果A=[5,6],那么A.maxplus返回1和6。我该怎么做?Ed S,谢谢!我试图像上面那样定义方法,但我不知道如何使用“self”来引用我正在处理的矩阵!Ed,我知道你没有被要求改进代码,但值得注意的是,实例方法可以简化很多,例如,
classarray;def maxplus;最大值=最大值;[指数(最大值),最大值];结束;end
,要调用的
ndx,mx=[1,2,3]。maxplus#ndx=>2,mx=>3
。Ice,对于方法
max
index
,默认接收器为
self
,因此无需明确引用
self
。在上面的
self.length
中也不需要
self
,尽管在
self[i]
和其他一些情况下需要它。@CarySwoveland:当然,在现实世界中,作为一种打印最大值的方法,它可能被简化为零,并且它的索引不是非常有用。我在
length
中添加了
self
只是为了进一步说明这一点,但你是对的,我不会在我自己的代码中使用它。
class Array
    def maxplus
        i = 0
        maximum = 0
        while i < self.length-1
            if self[i] > maximum
                maximum = self[i]
                index = i
            end
            i += 1
        end
        puts index
        puts maximum
    end
end

[1, 2, 3].maxplus