Scala'da yeni bir "vaka sınıfı" oluşturmak için "yeni" yi kullanmanızın gerekmemesinin nedeni nedir? Şimdi cevapsız bir süre aramayı denedim.Neden "vaka sınıfı" yeni bir nesne oluşturmak için "yeni" ye gerek duymuyor
cevap
Eğer nasıl veya neden ister misin? Diğer yanıt notları gibi, ,'un otomatik olarak oluşturulan tamamlayıcı nesnede nasıl yalnızca apply
yöntemidir. İçin
neden: vaka sınıfları genellikle Scala algebraic data types uygulamak için kullanılan ve new
-daha az yapıcı (a değer yaratmak örneğin daha desen eşleştirme yoluyla yapısökümünden benziyor) daha şık bir kod verir ve Diğer dillerde ADT sözdizimine daha çok benzemektedir.
Uygulama sınıfı, uygulanan apply()
ile önceden oluşturulmuş tamamlayıcı nesneye sahiptir. Birisi bile bu şikayet: How to override apply in a case class companion :)
Vaka sınıflar kurucular gibi kullanabilirsiniz bunların tamamlayıcı bir nesne üzerinde bir otomatik olarak oluşturulanapply
fonksiyon sağlamak.
object Person {
def apply(name: String, age: Integer): Person = new Person(name,age)
}
Örnek:
case class Person(name: String, age: Integer)
üçü de aynı şeyi yapmak aşağıdaki
Scala yılında bozulamaz bayt kodu aşağıdaki şekilde oluşturulanapply
fonksiyonunu bulacaksınız. Eğer
val p1 = Person("Frank", 23)
kullanırsanız val p0 = new Person("Frank", 23) // normal constructor
val p1 = Person("Frank", 23) // this uses apply
val p2 = Person.apply("Frank", 23) // using apply manually
Yani bir yapıcı, yöntemini uygulamak dediğimiz bu bir yöntem değildir.
Daha fazla bilgi için lütfen scala-object-apply-functions'u okuyun.
Teşekkürler, bu benim aradığım şey :) –