SORU
14 Aralık 2009, PAZARTESİ


Dava Scala vs Listeleme nesneleri

En iyi uygulama Scala case classes (ya da nesneleri) vs uzanan Numaralandırma kullanma hakkında yönergeler var mı?

Aynı faydaları bazı teklif gibi görünüyor.

CEVAP
14 Aralık 2009, PAZARTESİ


Çok büyük bir fark Enumerations name bazı Dize onları başlatmasını desteği ile gelen. Örneğin:

object Currency extends Enumeration {
   val GBP = Value("GBP")
   val EUR = Value("EUR") //etc.
} 

Sonra da yapabilirsiniz:

val ccy = Currency.withName("EUR")

Bu numaralandırma (bir veritabanı gibi) devam ederse veya veri dosyalarını ikamet eden, onları oluşturmak isteyen yararlıdır. Ancak, tuhaf bir eklenti olarak Listeleme Scala biraz sakar olan general buluyorum ve duyguları var, ben şimdi case objects kullanma eğiliminde. case object bir numaralama daha esnek

sealed trait Currency { def name: String }
case object EUR extends Currency { val name = "EUR" } //etc.

case class UnknownCurrency(name: String) extends Currency

Şimdi avantajı var

trade.ccy match {
  case EUR                   =>
  case UnknownCurrency(code) =>
}

@chaotic3quilibrium olarak belirttiği bazı düzeltmeler okuma kolaylığı ():

Hakkında "(kod) "" Currency türü. set kapalı yapısı kırma daha işlemek için başka yollar para birimi kodu bir dize bulma var" desen, UnknownCurrency Tip 13 ** Currency şimdi bir API diğer yerlerine bakabilir.

Bu tavsiye için itme diye dışarıda Enumeration ve istemci ile bir anlaşma Option[Currency] yazın bu açıkça gösteriyor orada gerçekten bir eşleştirme sorunu ve "teşvik" kullanıcı API için birşeyler yap kendini.

Diğer cevaplar burada takip etmek, Enumerations case objects ana dezavantajları vardır:

  1. Tüm örnekleri üzerinde yineleme yok"" . numaralandırma . Bu kesinlikle böyledir, ama bu gerekli olan uygulamada son derece nadir buldum.

  2. Kolayca oluşturmak olabilir mi değeri kalıcı. Bu da doğrudur ama, büyük numaralandırma durumunda (örneğin, para) dışında, bu büyük bir yük mevcut değildir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • kylediablo

    kylediablo

    8 Ocak 2007
  • Sorikan

    Sorikan

    3 ŞUBAT 2008