我仍然无法弄清楚如何使子类构造函数跟随其父...
例如:
require 'mechanize'
class Scraper
attr_accessor :agent
def initialize
# I dont know if using instance variable is the right thing to do
@agent = Mechanize.new
end
end
class ScraperA < Scraper
end
我想让ScraperA
遵循其父构造函数行为,
那是
在没有我重新输入Mechanize.new
的情况下实例化一个Mechanize对象
ScraperA initialize()方法。这可能吗?
只想遵循DRY原则,但红宝石让我很难?
希望不是,也许这只是我的无知。
期待简单的解决方案,Tnx。
编辑:
事实证明我在ScraperA中有空的initialize()方法,它覆盖了默认值
初始化()。
所以是的,这个例子正在工作,因为那里没有空的初始化方法。
抱歉我的愚蠢。
TNX。
答案 0 :(得分:29)
class A
def initialize
@a = "foo"
end
end
class B < A
def to_s
@a
end
end
puts B.new
# "foo" is printed
这是有效的,因为initialize
是继承的,就像任何其他方法一样。如果你通过新的子initialize
覆盖它,它就会停止工作。然后,您可以明确使用super
来调用父级initialize
。
答案 1 :(得分:14)
这应该有用......
class ScraperA < Scraper
def initialize
super
# do other stuff here if necessary
end
end
...如果你想为子类提供其他逻辑。正如评论所说,如果构造函数与父类完全相同,那么原始代码应该可以正常工作。