我仍然无法弄清楚如何使子类构造函数遵循其父...
示例:
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
Run Code Online (Sandbox Code Playgroud)
我想ScraperA
遵循它的父构造函数行为,
即在没有我Mechanize.new
在ScraperA initialize()方法中重新输入的情况下实例化一个Mechanize对象 .这可能吗 ?
只是想遵循DRY原则,但红宝石让我很难???
希望不是,也许这只是我的无知.期待简单的解决方案,Tnx.
编辑:
事实证明我在ScraperA中有空的initialize()方法,它覆盖默认的initialize().所以是的,这个例子正在工作,因为那里没有空的初始化方法.抱歉我的愚蠢.TNX.
Ama*_*dan 32
嗯......呃?是的,确实......看看这个:
class A
def initialize
@a = "foo"
end
end
class B < A
def to_s
@a
end
end
puts B.new
# "foo" is printed
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它initialize
是继承的,就像任何其他方法一样.如果你通过新的子程序覆盖它initialize
,它就会停止工作.然后你可以明确地super
用来调用父母的initialize
.
Dan*_*man 14
这应该工作......
class ScraperA < Scraper
def initialize
super
# do other stuff here if necessary
end
end
Run Code Online (Sandbox Code Playgroud)
...如果你想为子类提供其他逻辑.正如评论所说,如果构造函数与父类完全相同,那么原始代码应该可以正常工作.