2013-05-23 21 views
6

Scala'da nesneyi taklit etmenin "doğru" yolu nedir? ÖrneğinScala nesnesi, tür/değer takma adları sağlayan özelliklere sahip nesneler

, ben, en defalarca RoleGroup ithal etmek istemiyorum beri (SBT alt projelerine bölünür) başvurumun çeşitli yerlerinde

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

yılında kapsamda bir RoleGroup gerek diyelim takma RoleGroup özelliği karar verdi ve şöyle tipi ve val meslektaşları içine nesne:

package com.developer 
package controller 

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

ve sonra alt proje paketi nesneleri ücretsiz ithalatı almak için yardımcı özelliği uzatabilirsiniz:

package com.client 

package object member 
    extends com.developer.controller.ControllerBase 

Kapsamda olması gereken diğer durum nesneleri için de aynısını yapıyorum. Bu mantıklı bir çözüm mü? yani farkında olmam gereken herhangi bir sorun/sorun var mı? Her şey derlenmiş ve tarayıcı test sayfaları, ön-refakatlı uygulamada olduğu gibi çalışır, ancak bu en iyi yaklaşım olup olmadığından emin değilim.

cevap

6

Bu mantıklı bir yaklaşım. Aslında it's being applied in the Scala library'un kendisi.

Takma ad için ihtiyacınız olan iki akla gelebilecek iki düzey vardır: yazım (sınıflar ve sınıflar) ve değer (ör. Nesneler, paketler ve değerler). İkisini de örtüyorsun.

+1

+1, ilginç, bu diğer ad tarifi olmalıdır ;-) özellikler/sınıflar ve nesneler ve diğerleri için vals için. Bu yaklaşımla bir çok ithalat boilerplate'i kesinlikle azaltabilir – virtualeyes

İlgili konular