2015-12-30 20 views

cevap

5

Scala vaka sınıfları sözdizimsel şekerlerdir. Bir vaka sınıfı oluşturduğunuzda, Scala derleyici, sizin için apply ve unapply yöntemiyle bir tamamlayıcı nesne oluşturacaktır, böylece basitçe varmış gibi kullanabilirsiniz. Here, vaka sınıfları hakkında daha ayrıntılı bilgi için bir bağlantıdır.

-1

Ayrıca firstName sınıf parametrenize varsayılan bir değer de verebilirsiniz. Böylece parametresi geçirmeden bir örnek oluşturabilirsiniz.

Örnek:

case class CasePerson(firstName : String = "XYZ") 
val person = CasePerson() 
+0

Benim özür, ancak bu soru soruyor ne değildir: Eğer CasePerson("hi") ararsanız

object CasePerson{ def apply() = new CasePerson("XYZ") def apply(s: String) = Seq(new CasePerson(s), new CasePerson(s)) // will replace the default factory for the case class } 

Şimdi, bunun yerine üretecektir. – marios

3

Örnek sınıflar dolaylı durumda sınıfı birincil yapıcı ile aynı bağımsız değişkenler bir apply() bir tamamlayıcı bir nesne ile eşlik eder. olduğu

: Ayrıca açıkça bir refakatçi nesnesi tanımlarsanız

case class CasePerson(firstName: String) 

object CasePerson{ 
    def apply(firstName: String) = new CasePerson(firstName) 
} 

eşlik edecek Şimdi, örtülü olarak tanımlanan birine ekleme olarak düşünebiliriz.

object CasePerson{ 
    def apply() = new CasePerson("XYZ") // the one manually added 
    def apply(firstName: String) = new CasePerson(firstName) // this one is automatically added 
} 
: bir kombine arkadaşı nesnesi yaratıyor sanki

object CasePerson{ 
    def apply() = new CasePerson("XYZ") 
} 

Bu ifade, bunu düşünebilirsiniz:

Örneğin, örnekteki Tamamlayıcı nesnesine bir yeni apply eklendi

Şimdi, birincil kurucu ile aynı argümanlara sahip olan apply kendi sürümünüzü eklemeye karar verirseniz, bu durum vaka sınıfının varsayılan davranışını gölgeleyecektir. Aşağı oy için

List(CasePerson("hi"), CasePerson("hi")) 
+0

Bunu yinelemek, 1. uygulama geçerlidir, ancak 2. sonuç, hata iletisinde: aşırı tanımlı tanım için belirsiz başvuru, her iki yöntemde de Type CasePerson nesnesi (firstName: String) A $ A28.this.CasePerson ve yöntemi uygulanır. ObjectPerson type (s: String) Seq [A $ A28.this.CasePerson] eşleşme bağımsız değişken türleri (String) – Mark

+0

@Mark bana haber verdiğiniz için teşekkürler! Hangi Scala sürümünü kullandınız? Bir REPL kullanıyor musunuz? Bir REPL içinde olmanız durumunda, 'paste:' seçeneğini kullandığınızdan emin olun, böylece hem sınıf hem de onun eşlik eden nesnesi tek bir blokta birlikte tanımlanır. – marios