我试图从程序背景中了解Rails中面向对象和继承的概念,特别是我想了解如何在Rails框架中覆盖类中的默认行为。
比如说我想在ActionDispatch :: Request中覆盖一个方法,我假设我做了这样的事情:
Request < ActionDispatch::Request
def method_i_want_to_override
actions_to_perform
end
end
我很困惑,虽然我如何加载它以便它改变ActionDispatch :: Request对象的行为方式。
答案 0 :(得分:1)
当您使用继承覆盖方法时(即您在子类中),您可以再次声明该方法,就像您所做的那样:
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
,则子类'方法中的所有参数都将传递给父类。这包括给出的任何块。