2011-02-14 7 views

Respuesta

2

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$.

+6

Entonces, ¿qué valor tiene esto? –

+1

P.E. para proporcionar una implementación predeterminada. – Landei

+0

El acompañante no parece ser el lugar correcto para una implementación predeterminada. Para eso es la jerarquía de clases habitual. – Raphael

2

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.

6

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.

  1. utiliza a través del objeto compañero: BindHelpers.foo()

  2. 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.

+0

Has notado que en Lift Mappers escribes el mismo patrón, y eso amplía su clase compañera pero no su rasgo. – Sawyer

Cuestiones relacionadas