SORU
16 EYLÜL 2011, Cuma


Birden fazla sınıflar arasında nasıl kullanacağını Scala tür anahtar kelime:

Tekrar bir büyü Haskell yazdıktan sonra Scala geliyor, yazın benim sınıf tanımları biraz, örneğin daha okunabilir hale getirmek için anahtar kelime kullanarak başladım:

type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }

Karşılaştığım sorun şu ki; bu tür tanımları bir sınıf veya nesnenin içinde yaşamak için ihtiyaç vardır - " Haskell onlar gibi. "birinci sınıf vatandaş değiller Eğer bir tür bir sınıf veya nesne dışında tanımlamak için çalışırsanız, derleyici expected class or object definition.

Benim sorunum bir paket içinde birden çok sınıf ve nesneler arasında bu tür kullanmak için nasıl? Ne yaptım şimdi çok çirkin görünüyor:

object RestfulTypes { type RestfulParams = Map[String, String] etc }

Ve başka bir sınıf dosyası:

import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }

Bunu yapmanın daha iyi bir yolu - ve bu arada Scala uzmanları iyi bir şey ya da türleri/nesne sınıfları içinde tanımlanan kötü bir şey var mı?

CEVAP
16 EYLÜL 2011, Cuma


package objects sizin için çalışacak?

Makale:

2.8, bir paket koyarsın tek şey olana kadar, sınıflar, özellikler ve bağımsız nesneler. Bu şimdiye kadar bir paketin üst düzeyinde yerleştirilen en yaygın tanımları vardır, ama Scala 2.8 sadece o size sınırı yok. Bir sınıf içine koyabilirsiniz tanımı her türlü, aynı zamanda, bir paketin üst düzeyinde koyabilirsiniz. Eğer bazı yardımcı yöntem varsa bütün bir paketi kapsamında, devam edin ve paketin üst düzeyine doğru koymak istersiniz. Bunu yapmak için, bir paket nesnesi tanımlar koymak. Her bir paket bir paket nesneyi almasına izin verilir. Tüm tanımlar paket nesnesine yerleştirilen paketin üyeleri olarak kabul edilir.

package object scala birçok çeşidi vardır ve zaten değerler, kendi türleri için aynı tekniği kullanabilirsiniz bence.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • finalcall07

    finalcall07

    11 NİSAN 2008
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009
  • The Verge

    The Verge

    8 AĞUSTOS 2006