2013-05-23 4 views
6

Wie lautet die "richtige" Methode, ein Objekt in Scala umzubenennen?Scala-Paketobjekte mit Attributen, die Typ-/Wert-Aliase bereitstellen

Zum Beispiel lassen Sie uns sagen, dass ich ein Role in ihrem Umfang in verschiedenen Teilen meiner Anwendung benötigen (die bis in SBT Teilprojekte gebrochen)

trait RoleGroup 
object RoleGroup { 
    case object ADMIN  extends RoleGroup 
    case object MEMBER extends RoleGroup 
    case object PUBLIC extends RoleGroup 
} 

Da ich will nicht immer wieder zu Role importieren, I beschlossen, alias Role Merkmal und Objekt in Art und val Pendants wie so:

package com.developer 
package controller 

trait ControllerBase { 
    type RoleGroup = controller.RoleGroup 
    val RoleGroup  = controller.RoleGroup 
    ... 
} 

und dann können Teilprojektpaketobjekte der Helfer Charakterzug erweitern die Importe kostenlos zu bekommen:

package com.client 

package object member 
    extends com.developer.controller.ControllerBase 

Ich mache dasselbe für andere Fallobjekte, die im Geltungsbereich sein müssen. Ist das eine vernünftige Lösung? Gibt es irgendwelche Nachteile/Probleme, die ich beachten muss? Alles Kompilieren und Browser-Test-Seiten scheinen zu laufen, genau wie in vor-umgestalteter Anwendung, aber bin nicht sicher, ob dies der beste Ansatz ist.

Antwort

6

Es ist ein vernünftiger Ansatz. In der Tat it's being applied in the Scala library selbst.

Es gibt nur zwei vorstellbare Ebenen von Mitgliedern, die Sie Alias ​​benötigen: Typ (d. H. Merkmale und Klassen) und Wert (d. H. Objekte, Pakete und Werte). Du deckst sie beide ab.

+1

+1, interessant, das muss dann das Alias-Rezept sein ;-) Typen für Traits/Klassen und Vals für Objekte et al. Definitiv kann eine Menge Import-Boilerplate mit diesem Ansatz reduzieren – virtualeyes

Verwandte Themen