2010-03-08 45 views
82

Scala 2.8'de bir vaka sınıfının yüklenicilerine aşırı yüklenmenin bir yolu var mı?Aşırı yük kurucu?

Evet, lütfen açıklamak için bir pasaj yerleştirin, eğer olmasın, lütfen nedenini açıklayın?

cevap

151

Aşırı yükleme kurucular vaka sınıfları için özel değildir: Ancak

case class Foo(bar: Int, baz: Int) { 
    def this(bar: Int) = this(bar, 0) 
} 

new Foo(1, 2) 
new Foo(1) 

, ayrıca new ihmal çağrılan arkadaşı nesne, içinde apply yöntemi aşırı isteyebilirsiniz.

object Foo { 
    def apply(bar: Int) = new Foo(bar) 
} 

Foo(1, 2) 
Foo(1) 

Scala 2.8'de, adı geçen ve varsayılan parametreler genellikle aşırı yükleme yerine kullanılabilir. kesinlikle doğru değil

case class Baz(bar: Int, baz: Int = 0) 
new Baz(1) 
Baz(1) 
+0

Çok güzel :) gibi Tamamlayıcı nesnesi ilan edebilir, bu 2.8'den yeni? Bilmiyordum :) – Felix

+0

Evet, Adlandırılmış ve Varsayılan parametreler Scala 2.8'de yeni. – retronym

+7

Martin Odersky, ek uygulama yöntemlerinin neden otomatik olarak eklenmediğini açıklıyor: http://www.scala-lang.org/node/976 –

17

Aşırı yüklenmiş bir kurucuyu her zamanki gibi tanımlayabilirsiniz, ancak bunu çağırmak için "yeni" anahtar sözcüğünü kullanmanız gerekir.

scala> case class A(i: Int) { def this(s: String) = this(s.toInt) } 
defined class A 

scala> A(1) 
res0: A = A(1) 

scala> A("2") 
<console>:8: error: type mismatch; 
found : java.lang.String("2") 
required: Int 
     A("2") 
     ^

scala> new A("2") 
res2: A = A(2) 
+2

- Ben scala içinde geri dönüş değerlerinin gibi bir şey arıyordu, normal –

İlgili konular