Sé que si hago una subclase de la clase String y anulo su método de capitalizar, puedo llamar a la versión de capitalización de la clase String con super
. ¿Qué pasa si en su lugar volví a abrir la clase String y reescribí el método de capitalizar? ¿Hay alguna manera de llamar a la versión anterior de ese método?Clases de reapertura de Ruby: ¿se puede acceder a los métodos anulados?
Respuesta
No fuera de la caja. Un enfoque común es cambiar el nombre del método existente por un nuevo nombre. Luego, en su versión reescrita, llame al método anterior por el nuevo nombre.
def String
alias to_i old_to_i
def to_i
#add your own functionality here
old_to_i
end
end
También puede que desee ver en alias_method_chain
, lo que lo hace un poco de esto para usted.
También hay otro enfoque interesante para obtener super
de trabajo - si la clase para abrir la soporta (por ejemplo, porque está escrito por sí mismo):
Los métodos de la clase no se definen directamente en el cuerpo de la clase, pero en otro módulo que luego se incluye. Para sobrescribir un método de la clase re-abierta, incluya su propio módulo con la versión extendida de este (que puede usar super
).
Esto se usa, por ejemplo, en la irb-alternative ripl para permitir que los complementos implementen sus propias versiones de métodos principales (que llaman a super
para obtener el comportamiento original).
- 1. ¿Por qué los métodos parciales deben ser anulados?
- 2. ¿Los métodos anulados heredan los decoradores en python?
- 3. ¿Cómo se accede a métodos de clases protegidos desde métodos de instancia en Ruby?
- 4. ¿Cómo aprendo los métodos a los que se puede acceder para ciertos objetos?
- 5. ¿Por qué aún se puede acceder a los métodos de ayuda privada en las vistas?
- 6. ¿Cómo se puede acceder rápidamente a la documentación de ruby y rieles cuando se usa vim?
- 7. ¿Cómo evitar los métodos de superclase siendo anulados por subclase en el objetivo - c
- 8. ¿Cómo se puede acceder a los llaveros de GNOME desde Ruby?
- 9. "La manera de Ruby" (mixins y reapertura de clase) versus inyección de dependencia
- 10. C#: Métodos anulados con atributos de seguridad en .NET 4
- 11. Ruby Class Métodos vs. Métodos en clases propias
- 12. ¿Cómo se copian los métodos singleton entre diferentes clases de Ruby?
- 13. Ruby/Rails: reapertura vs sobreescritura de una clase
- 14. Java no puede acceder a los métodos de clase desde la instancia de clase
- 15. ¿Se puede acceder a los datos antiguos en CouchDB?
- 16. ¿Cómo acceder a los métodos de video HTML5 con jQuery?
- 17. En clases anidadas de Java, ¿puede la clase adjunta acceder a miembros privados de clases internas?
- 18. ¿Por qué Java exige la compatibilidad del tipo de devolución para los métodos estáticos anulados?
- 19. ¿Se puede acceder a IEnumerable a medida que se devuelve?
- 20. Ruby no puede acceder a la variable fuera del método?
- 21. Acceder a las variables de los archivos incluidos en Ruby
- 22. acceder a las propiedades de los padres y los métodos sobrescritos en PHP
- 23. ¿Cómo llamar a métodos anulados en una subclase? Posible candidato para la refactorización
- 24. Alternativas a clases abstractas en Ruby?
- 25. Cómo llamar dinámicamente a los métodos de acceso en Ruby
- 26. Ruby - ¿Cómo redefinir los métodos de clase?
- 27. Agregar métodos a las clases POCO
- 28. ¿Cómo acceder a los métodos y controles de formulario de una clase en C#?
- 29. ¿Puede Ruby acceder a la salida desde los comandos del shell tal como aparece?
- 30. org.hibernate.HibernateException: no se puede acceder a la secuencia de lob
Este es un duplicado de [Cuando mono parcheando un método, puede llamar al método reemplazado de la nueva implementación] (http://StackOverflow.Com/q/4470108/). –