我知道如果我继承String类并覆盖它的大写方法,我可以用super
调用String类的大写版本。如果我重新打开了String类并重写了大写方法呢?有没有办法可以调用该方法的以前版本?Ruby重新打开类 - 可否重写方法被访问?
5
A
回答
5
不开箱即用。常用的方法是将现有方法重命名为新名称。然后,在您的重写版本中,用新名称调用旧方法。
def String
alias to_i old_to_i
def to_i
#add your own functionality here
old_to_i
end
end
你也可能想看看alias_method_chain
,其中做了一些为你处理。
0
也有另一种有趣的方法来获得super
工作 - 如果打开类支持它(例如,因为它是由你自己写的):
类的方法不是直接在类主体中定义,但在另一个包含的模块中。要覆盖重新打开的类的方法,请使用它的扩展版本(可能使用super
)包含您自己的模块。
例如,在irb-ripl中使用这个插件来让插件实现他们自己版本的核心方法(调用super
来获得原始行为)。
相关问题
- 1. Ruby/Rails:重新打开vs覆盖类
- 2. 在Ruby中重写类方法
- 3. 重新打开Ruby类的奇怪问题
- 4. Ruby - 如何重新定义类方法?
- 5. VerifyError:class net.sf.cglib.core.DebuggingClassWriter重写最终方法访问
- 6. 问题并重新打开
- 7. 父类的方法如何访问子类的重写变量?
- 8. 是否可以重写Grails域类中的List访问器?
- 9. ROR +重新打开使用Ruby代码
- 10. 重写hashCode方法在类
- 11. 重写_create类方法
- 12. 重写父类的方法
- 13. 是否有可能重写派生类中的静态方法?
- 14. 在重新定义方法中访问超类方法的问题
- 15. Ruby:调用子类中的父类的重写方法
- 16. 访问URL重写
- 17. Ruby:从模块中重新打开一个类
- 18. 在android中访问重写方法的参数的子方法?
- 19. 方法必须重写超类方法
- 20. 重新打开AVCaptureSession
- 21. Son中的重写方法是否可以调用C++中父模板类的重写方法?
- 22. 重新加载页面是否重新打开
- 23. Arduino:重写打印类问题
- 24. 凡重新打开类回报率
- 25. URL重写问题重新写入
- 26. 重新定义File :: dirname ruby方法
- 27. ruby/datamapper:重构类方法到模块
- 28. 你可以重写Ruby中的别名方法吗?
- 29. 阶 - 尝试打印重写toString方法
- 30. 流在循环中写入OutputStream时无法重新打开
这是[当猴子修补方法时,你能否从新实现中调用重写的方法](http://StackOverflow.Com/q/4470108/)。 – 2011-06-10 16:20:03