Encuentro que este tipo de código es muy común en Lift Framework, escrito así:
object BindHelpers extends BindHelpers {}
¿Qué significa esto?¿Por qué las personas definen objeto extiende su clase compañera?
Respuesta
Es interesante para un object
extender su clase complementaria porque tendrá el mismo tipo que la clase.
Si object BindHelpers
no extendió BindHelpers, sería del tipo BindHelpers$
.
Es posible que el patrón aquí sea otro. No sé Lift para responder a esto, pero hay un problema con object
en el sentido de que no se pueden burlar. Entonces, si define todo en un class
, que puede ser burlado, y luego simplemente hace que el objeto lo extienda, puede simular la clase y usarla en lugar del objeto dentro de sus pruebas.
En este caso, BindHelpers
es un rasgo y no una clase. Deje que foo()
sea un método definido en BindHelpers
, para acceder a él puede hacerlo.
utiliza a través del objeto compañero:
BindHelpers.foo()
mezclar el rasgo
BindHelpers
en una clase y de este modo acceder a los métodos dentro de ella.
Por ejemplo:
class MyClass extends MyParentClass with BindHelpers {
val a = foo()
}
Las mismas técnicas se utiliza en Scalatest para ShouldMatchers
por ejemplo.
Has notado que en Lift Mappers escribes el mismo patrón, y eso amplía su clase compañera pero no su rasgo. – Sawyer
Puede encontrar David Pollak's answer a la misma pregunta en el grupo liftweb.
- 1. pixel.gif, ¿por qué las personas lo usan?
- 2. ¿Por qué las personas a menudo omiten público/privado/protegido al declarar una clase?
- 3. ¿Qué atributos .Net aplican las personas a su código?
- 4. ¿Por qué las personas usan valores de magia en lugar de nulo en su código?
- 5. ¿Por qué las personas siguen creando fuentes RSS?
- 6. ¿Clase que se extiende?
- 7. ¿Por qué razones las personas eligen Ruby sobre Java?
- 8. Pthread: ¿Por qué las personas se molestan en utilizar pthread_exit?
- 9. ¿Por qué las personas usan jQuery para operaciones básicas?
- 10. ¿Por qué las personas usan linq en sql?
- 11. ¿Por qué las personas usan ATL para la programación COM?
- 12. ¿Por qué las personas llaman a jQuery $ alias 'fábrica'?
- 13. OpenGL: ¿por qué se eliminó la matriz de matriz y qué están usando las personas ahora?
- 14. ¿Qué razones tuvieron las personas para escribir su propio cargador de clases?
- 15. ¿Cómo se definen las propiedades de una clase en php?
- 16. clase por su nombre
- 17. En Scala, ¿qué sucede cuando un objeto interno extiende la clase que lo incluye?
- 18. En algunos códigos Java, ¿por qué la clase Deck extiende la clase de la Tarjeta?
- 19. ¿Por qué los métodos C++ a veces se definen dentro de las clases?
- 20. ¿Por qué los miembros del objeto de dominio (POCO) se definen como virtuales?
- 21. ¿Por qué jQuery pasa el objeto ventana a su ámbito
- 22. clase interna que se extiende
- 23. dos archivos CSS que definen misma clase
- 24. HTML/CSS: ¿Por qué el cuerpo no se extiende a su contenido?
- 25. get padre extiende la clase en php
- 26. ¿Por qué mi objeto C++ pierde su VPTr
- 27. ¿Por qué las personas asignan $ this = $ (this) en muchos plugins jQuery?
- 28. ¿Por qué puede crear una clase en su definición?
- 29. java force una clase que se extiende
- 30. ¿Qué se entiende por 'objeto de primera clase'?
Entonces, ¿qué valor tiene esto? –
P.E. para proporcionar una implementación predeterminada. – Landei
El acompañante no parece ser el lugar correcto para una implementación predeterminada. Para eso es la jerarquía de clases habitual. – Raphael