我有一个班级Text
,我在其中添加了不同的模块,例如Capitalize
或Trim
。最后,我得到:
Text.ancestors # => [Capitalize,Trim,Text,Object,Kernel]
我想调用一个纠正文本的方法。通过调用一个返回带有前一个祖先行为的文本的方法,我想递归遍历每个祖先,直到我到达Text
类,然后返回文本。
我有问题。每个模块和类都有相同的方法correct_text
,我不能创建任何别名。当我通过Capitalize
时,它没有问题,但是当我递归调用Trim
中的方法时,我无法在此祖先(私有方法或使用send
)上调用该方法,因为在Capitalize
上有一个名称相同的方法,最终根据顺序调用。
是否可以在祖先上调用方法?是否可以在不使用prepend
的情况下撤消include
/ extend
/ undef_method
?
答案 0 :(得分:2)
只需在前置方法中调用super
即可。
module Capitalize
def correct_text
super.capitalize
end
end
module Trim
def correct_text
super.strip
end
end
class Text
prepend Capitalize
prepend Trim
def correct_text
'hello '
end
end
Text.new.correct_text # => "Hello"