2011-04-23 14 views

Respuesta

12

Normalmente, pongo las funciones de utilidad que son semánticamente diferentes en rasgos diferentes y creo un objeto para cada rasgo, p.

trait Foo { 
    def bar = 1 
} 
object Foo extends Foo 

De esa manera soy más flexible. Puedo importar las funciones de utilidad a través de una declaración import o a través de with en la declaración de clase. Además, puedo agrupar fácilmente diferentes rasgos de utilidad en un nuevo objeto para simplificar los enunciados de importación para las funciones de utilidad más comúnmente usadas, p.

object AllMyUtilites extends Foo with Foo2 
+1

Considero 'with' una mala práctica, ya que contamina los tipos, da menos flexibilidad (puede omitir y renombrar con' import's), y nunca necesita que sus clases sean también clases de utilidad, solo cuando agrupa tus utilidades juntas. Entonces, me quedaría con 'object's o usar' with' solo para agrupar. – Tvaroh

+0

Esto es genial, estaba pensando si tener un rasgo _o_ un objeto, ¡pero puede tener _ambas_ !! =) – dividebyzero

2

Características si desea que se mezclen con las clases que van a usarlo. Objetos si solo quiere importarlos.

+0

Si tiene funciones de utilidad para diferentes SO, ¿no sería mejor tenerlas como características? De esa manera, algún comportamiento podría ser heredado? – Geo

+0

@Geo, ¿qué quieres decir? La misma interfaz con diferentes implementaciones (una para cada sistema operativo)? Entonces es mucho más que funciones de utilidad, es más una cuestión de diseño (tal vez un requisito). – pedrofurla

7

Empaquetar objetos o simplemente objetos.

Véase, por ejemplo, Scala.Predef y scala.math.

+0

¿Qué sucede si desea aprovechar el subtipo de polimorfismo? –

Cuestiones relacionadas