NoMethodError;私有或未定义的方法?

时间:2014-05-23 03:51:33

标签: ruby methods

class Array
  def my_uniq(array_taken)
    new_array=[]
    array_taken.each do |element|
      new_array << element unless arr.include(element)
    end
  end
end
Array.my_uniq([1,2,3,3])

我在终端中使用ruby calc1.rb来调用程序。终端位于正确的文件夹中,文件保存在正确的文件夹中。

输出

calc1.rb:9:in `<main>': undefined method `my_uniq' for main:Object (NoMethodError)

以前的答案似乎是关于在定义之前调用方法,或者对我来说,就像我调用类的解决方案一样,然后在数组上调用方法。这里有私人或未定义的方法吗?

2 个答案:

答案 0 :(得分:3)

您需要创建方法作为要使用的类方法。但是您创建了该方法作为类Array的实例方法并调用Array类对象,而不是Array的实例,因此您得到了错误。

以下工作:

class Array
  def self.my_uniq(array_taken)
    new_array=[]
    array_taken.each do |element|
      new_array << element unless new_array.include(element)
    end
    new_array
  end
end
Array.my_uniq([1,2,3,3])

看一下这个错误,你似乎从顶层调用了方法my_uniq。但在这种情况下,它也不会起作用,因为to selfmainObject类的实例。但该方法未在Object类中定义作为一个实例方法,所以来自toplevel的裸方法调用也行不通。

答案 1 :(得分:0)

这是我得到它的脚本,以防有人想知道

class Array
def self.my_uniq (array_taken)
    new_array=[]
    array_taken.each do |element|
      new_array << element unless new_array.include?(element)
    end
    new_array
  end
end
p Array.my_uniq([1,2,3,3,3])