假设我想覆盖现有类Array
的方法,如下所示。
class Array
def to_s
self.join(',')
end
end
所以我的问题是 - 这个压倒性的工作怎么样?这是否将方法to_s的这个定义添加到类Array
?我的意思是如果课程包含' n'方法定义,它现在包含' n + 1'方法定义。还有,to_s
方法有两种定义,最后添加的方法是哪种方法有效?
感谢。
答案 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)