在Ruby中调用超级方法
我试图在Ruby中定义一些具有继承层次结构的类,但我想在派生类中使用基类中的方法之一。问题是我不想调用我使用的确切方法,我想调用另一个方法。以下内容不起作用,但这正是我想要做的(基本上)在Ruby中调用超级方法,ruby,inheritance,methods,super,derived,Ruby,Inheritance,Methods,Super,Derived,我试图在Ruby中定义一些具有继承层次结构的类,但我想在派生类中使用基类中的方法之一。问题是我不想调用我使用的确切方法,我想调用另一个方法。以下内容不起作用,但这正是我想要做的(基本上) A类 德福 放置“A::foo” 终止 终止 B类A::foo 也许,这就是你想要的 class A def foo puts 'A::foo' end end class B < A alias bar :foo def foo puts 'B::foo' end
A类
德福
放置“A::foo”
终止
终止
B类
也许,这就是你想要的
class A
def foo
puts 'A::foo'
end
end
class B < A
alias bar :foo
def foo
puts 'B::foo'
end
end
B.new.foo # => B::foo
B.new.bar # => A::foo
A类
德福
放置“A::foo”
终止
终止
B类B::foo
B.new.bar#=>A::foo
也许,这就是你想要的
class A
def foo
puts 'A::foo'
end
end
class B < A
alias bar :foo
def foo
puts 'B::foo'
end
end
B.new.foo # => B::foo
B.new.bar # => A::foo
A类
德福
放置“A::foo”
终止
终止
B类B::foo
B.new.bar#=>A::foo
一个更通用的解决方案
class A
def foo
puts "A::foo"
end
end
class B < A
def foo
puts "B::foo"
end
def bar
# slightly oddly ancestors includes the class itself
puts self.class.ancestors[1].instance_method(:foo).bind(self).call
end
end
B.new.foo # => B::foo
B.new.bar # => A::foo
A类
德福
放入“A::foo”
终止
终止
B类B::foo
B.new.bar#=>A::foo
一个更通用的解决方案
class A
def foo
puts "A::foo"
end
end
class B < A
def foo
puts "B::foo"
end
def bar
# slightly oddly ancestors includes the class itself
puts self.class.ancestors[1].instance_method(:foo).bind(self).call
end
end
B.new.foo # => B::foo
B.new.bar # => A::foo
A类
德福
放入“A::foo”
终止
终止
B类B::foo
B.new.bar#=>A::foo
哦,嘿。那真方便。所以它是别名#{new}:#{old}
?对。关键是,alias
是动态计算的。因此,如果将alias
放在B#foo
的定义之后,它将不起作用。它将变成B#foo
。哦,嘿。那真方便。所以它是别名#{new}:#{old}
?对。关键是,alias
是动态计算的。因此,如果将alias
放在B#foo
的定义之后,它将不起作用。它将变成B#foo
。