我正在尝试理解Rails中的面向对象和继承的概念,这些概念来自于过程背景,特别是我想了解如何覆盖Rails框架中类中的默认行为。
例如,假设我想覆盖ActionDispatch::Request中的一个方法,我假设我这样做:
Request < ActionDispatch::Request
def method_i_want_to_override
actions_to_perform
end
end不过,我对如何加载它以改变ActionDispatch::Request对象的行为方式感到困惑。
发布于 2011-07-02 11:41:09
当你使用继承来覆盖一个方法时(即你在一个子类中),你可以再次声明这个方法,就像你已经做的那样:
def method_that_exists_in_superclass
# stuff here
end现在,你通常不想重新实现整个方法行为,你只想做一些它已经做的事情(或者撤销它做的事情)。在本例中,您使用super来调用原始方法:
def method_that_exists_in_superclass
result = super
result + 7 # for example... but use your imagination
end您还可以将参数传递给super,这意味着您可以通过对自己的参数进行硬编码来覆盖参数:
def method_that_exists_in_superclass(arg1, arg2)
super(arg1, :foo)
end如果在不带任何参数的情况下调用super,则来自子类的方法的所有参数都将传递给父类。这包括给定的任何块。
https://stackoverflow.com/questions/6554738
复制相似问题