2014-10-14 10 views
5

Şu anda benim karakterim, B ve R'un aynı genel türüne sahip olmaktan başka gerçek bir kullanımı olmayan ekstra tip T'ye sahip. Üçüncü tip bir parametre kullanmadan Scala jeneriklerinde aynı türden nasıl sorulur?

trait GenericBuilder[T <: Any, B <: Builder[T], R <: Result[T]]

ben tip katılığına korurken bu durumda T ortadan kaldırmak için bir yol olup olmadığını merak beyanı basitleştirmek için.

DÜZENLEME: Ben Builder veya Result kod kontrol yok - onlar dışında bazı java eserler dan çekilir.

trait Builder { 
    type T 
} 
trait Result { 
    type T 
} 
trait GenericBuilder[B <: Builder, R <: Result] { 
    val w: B.T =:= R.T 
} 
:

cevap

2

sen sadece üyelere içine türlerini hareket olabilir beyanı o kısmını basitleştirmek istiyoruz ama siz türleri aynıdır bir şahit gerekir çünkü o zaman sepetine etrafında daha fazla bilgi sahip sonunda ise

+0

Sanırım bu = = = = kullanımdan kaldırıldı. – goral

+0

Kullanımdan kaldırıldığının farkında değilim. Scalaz === daha iyidir, ancak sadece ihtiyaç duyulan kullanım durumlarından birine sahipseniz önemlidir; =: = örnek için yeterlidir. – lmm

+0

Sözdizimi doğru mu? Dış tipten sonra bir "=" olmalı mı? Ayrıca türleri nereye yerleştirmeliyim? Eğer onları sınıfın dışına çıkarırsam, "yanlış üst beyanname" hatası alırım. Onları sınıfın içine yerleştirmek belli ki bir şey yapmıyor. Ayrıca Builder benim özellik ismim ancak tür takma adı gizleniyor gibi görünüyor? – NSF

İlgili konular