Ruby的意外行为';超级';关键词-Nokogiri继承
Ruby的Ruby的意外行为';超级';关键词-Nokogiri继承,ruby,ruby-1.9,ruby-1.9.2,ruby-1.8,ruby-1.9.3,Ruby,Ruby 1.9,Ruby 1.9.2,Ruby 1.8,Ruby 1.9.3,Ruby的super关键字的规则是,如果在没有参数的情况下调用它,则会转发所有原始参数。如果使用显式参数调用它,则显式参数以独占方式传入 在本例中,不应转发参数,因为我正在使用确切的参数调用super 例如: @doc = Nokogiri::HTML::DocumentFragment.parse("<body></body>") class Cat < Nokogiri::XML::Node def initialize(arg1, arg2) s
super
关键字的规则是,如果在没有参数的情况下调用它,则会转发所有原始参数。如果使用显式参数调用它,则显式参数以独占方式传入
在本例中,不应转发参数,因为我正在使用确切的参数调用super
例如:
@doc = Nokogiri::HTML::DocumentFragment.parse("<body></body>")
class Cat < Nokogiri::XML::Node
def initialize(arg1, arg2)
super("cat", arg2) # Pass arg2 to super
# Do something with arg1 later
end
end
@doc=Nokogiri::HTML::DocumentFragment.parse(“”)
类Cat
调用时:Cat.new(“dog”,@doc)
我希望返回一个
标记,并且我希望忽略第一个参数。相反,我得到了一个
标签
这种情况是否会违反预期行为?如果您查看,设置节点名称的实际上是new
方法,而不是initialize
方法。调用super
没有什么神秘的事情发生,只是initialize方法对这些参数没有任何作用
我假设这是因为
new
方法应该是为对象分配存储等的方法,在nokogiri的例子中,这意味着创建底层libxml节点,该节点包含节点的名称。您错过了标记ruby-1.9.3;-)谢谢,基于此,似乎不可能通过正常方式覆盖新的
方法。