bir kod var yapıcısı ile sınıfını genişleten özelliği örneğini? Anonim sınıfın vücudunda val veya def oluşturmaya çalıştı, yardımcı olmaz.nasıl
nasıl
cevap
az olası çözümler:
1) ayarlanmış varsayılan değer adıSınıf bir yapıcı olarak:
class A(name : String = "name")
trait E extends A
new E {} // {} is obligatory. trait E is abstract and cannot be instantiated`
2) karışımı sürekli A örneğine e:
object inst extends A("name") with E
// or:
new A("name") with E
Scala, triait sınıfını genişletmeyi yasaklamalıdır, çünkü bu, örneklenemediğinden kullanılamaz. –
A
bir yapıcı argümanını alır;
new A("someName") with E
Bu yüzden “E” ile başlayan E'yi başlatamıyorum ...? – ka4eli
E sınıfı ile karıştırılacak özelliği E sınırlamak istiyorsanız, yalnızca kendi türünü kullanabilirsiniz. Bununla birlikte, bu değişkeni, A (...)
class A(val name: String)
trait E { self: A =>
def printName() = println(self.name)
}
val e = new A("This is A") with E
e.printName()
- 1. Nasıl Nasıl değiştirebilirim CodeIgniter'da
- 2. nasıl
- 3. nasıl
- 4. nasıl
- 5. nasıl
- 6. nasıl
- 7. nasıl
- 8. nasıl
- 9. nasıl?
- 10. nasıl
- 11. nasıl
- 12. nasıl
- 13. nasıl
- 14. nasıl
- 15. nasıl
- 16. nasıl
- 17. nasıl
- 18. nasıl
- 19. nasıl
- 20. nasıl
- 21. nasıl
- 22. nasıl
- 23. nasıl
- 24. nasıl
- 25. nasıl
- 26. , nasıl
- 27. Nasıl {}
- 28. nasıl
- 29. nasıl
- 30. nasıl
no ile yeni E olarak tanımlamanın hiçbir yolu yoktur. Scala özelliği, bir sınıfı, yalnızca başka özellikleri uzatamaz. –
aslında bir özellik bir sınıfı genişletebilir ancak yapıcısını çağırmaz (bu durumda sorun budur). Böyle bir özellik beyanının neden derlendiğini merak ediyorum bile. – sschaef
@SteveWaldman @sschaef Özellikler, kurucu argümanlarıyla bile sınıfları genişletebilir. B sınıfı (isim: String), A (isim) ile E'yi uzatır, böyle bir özelliği kullanmanın tamamen iyi bir yoludur. – ghik