Ruby类中重写方法的机制

时间:2015-01-19 17:08:54

标签: ruby

假设我想覆盖现有类Array的方法,如下所示。

class Array
  def to_s
    self.join(',')
  end
end

所以我的问题是 - 这个压倒性的工作怎么样?这是否将方法to_s的这个定义添加到类Array?我的意思是如果课程包含' n'方法定义,它现在包含' n + 1'方法定义。还有,to_s方法有两种定义,最后添加的方法是哪种方法有效?

感谢。

1 个答案:

答案 0 :(得分:3)

您没有覆盖该方法,而是重新定义它。那里的那个已经消失了,取而代之的是你输入的内容。这对标准库来说是一件冒险的事情,你不知道其他代码依赖的行为。

你可以和自己的班级一起试试。

class Foo
  def bar
    puts 'One'
  end
end

class Foo
  def bar
    puts 'Two'
  end
end

Foo.new.bar
# Two

class Foo
  def bar
    puts 'Three'
    super
  end
end

Foo.new.bar
# Three
# test.rb:18:in `bar': super: no superclass method `bar' 
#   for #<Foo:0x007fd642029278> (NoMethodError)