2013-02-25 4 views
7
Böyle bir şey yapmaya çalışıyorum

:kopya destekleyen tüm vaka sınıfları için ortak özelliği oluşturun (id = NewID) yöntemi

trait IdentifiableModel[T] { 
    self: { def copy(id: ObjectId): T } => 

    val id: ObjectId 
} 

ben benzer şeyler yapmaya çalışırken bazı diğer ilgili sorular buldum ama onlar ettik Bu soruya gerçekten cevap vermedi. Benim durumumda, IdentifiableModel'in case class alt sınıflarını kopyalamaya çalışıyorum, hepsi bir id değeri paylaşıyor

+0

Ben bunun doğru makro kullanmak mümkün olabilir sanırım, herhangi çözüme fikirli açığım:

O Scala makro kullanır? –

+0

Tam olarak elde etmek istediğiniz nedir? Doğru olup olmadığımı söyle: tek bir 'id 'alanı olan bir dizi sınıf sınıfınız var ve otomatik olarak oluşturulmuş' kopya 'yöntemini polimorfik olarak (yani, ortak bir sınıf olan' IdentifiableModel' aracılığıyla) çağırabilir. ? –

+0

Bu, örtülü makro kullanılarak elde edilebilir, yani bir 'id: ObjectId' alanına sahip bir 'id' nesne sınıfından 'IdentifiableModel [T] {def kopyasına (id: ObjectId) bir durum sınıfından örtük bir dönüşüme sahip olabilir: T } '. Scala 2.10.1'de, örtülü makrolardaki bir hata nedeniyle, (https://issues.scala-lang.org/browse/SI-5923), bekleyemezseniz, varoluşsal türlerle bir numara kullanmanız gerekir. 2.10.2 için görünüyor. Tam kullanım durumunuz hakkında daha fazla bilgi sahibi olmak isterim, yukarıda belirtildiği gibi çalışacağını kontrol etmek isterim. – Leo

cevap

İlgili konular