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

时间:2014-05-29 04:51:42

标签: 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
                maximum = matrix[i]
                index = i
            end
            i += 1
        end
        puts index
        puts maximum
    end
end

当我尝试运行[0, 2, 4, 6, 8].maxplus时,出现以下编译错误:

undefined method 'maxplus' for [0, 2, 4, 6, 8]:Array (No Method Error)

我很茫然,并且一直试图解决我的问题。非常感谢你的帮助和教育。

1 个答案:

答案 0 :(得分:2)

您已为Array类定义了静态方法,即Array.maxplus(matrix),但您尝试在Array实例上调用它}。所以要么像这样称呼它:

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