猴子修补时接收未定义的方法错误

时间:2017-08-19 12:40:24

标签: ruby

我收到了错误

`<main>': undefined method `my_uniq' for Array:Class (NoMethodError)

运行以下代码时

class Array
  def my_uniq(array)
    new_arr = []

    array.each do |i|
      if !new_arr.include?(i)
        new_arr << i
      end
    end

    return new_arr
  end
end

test = Array.my_uniq([1,2,3])

非常感谢任何帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果您想要编写类方法,则必须使用self来定义它,即def self.my_uniq

class Array
  def self.my_uniq(array)
    array.each_with_object([]) do |element, new_arr|
      new_arr << element unless new_arr.include?(element)
    end
  end
end

对于类方法,类本身就是接收器:

Array.my_uniq([1, 1, 2, 3, 3, 1])
#=> [1, 2, 3]

如果您想编写实例方法,则省略self和参数:

class Array
  def my_uniq
    each_with_object([]) do |element, new_arr|
      new_arr << element unless new_arr.include?(element)
    end
  end
end

对于实例方法,该类的实例是接收者:

[1, 1, 2, 3, 3, 1].my_uniq
#=> [1, 2, 3]