Birkaç özellik ile birlikte bir temel sınıftan oluşan bir sınıf hiyerarşisi tasarlıyorum. Temel sınıf, çeşitli yöntemlerin varsayılan uygulamalarını sağlar ve özellikler, istiflenebilir özellikler/karışımlar olarak davranacak şekilde, abstract override
aracılığıyla bazı yöntemleri seçici olarak geçersiz kılar. etki alanına bir tasarım bu iyi çalışıyor perspektiften ve haritalar itibaren Kalıtsal "yapıcı parametreleri" alarak özellikleri nasıl bildirilir?
Ben, ancak buradan (bir özelliği) vb bir yüklemi buradan (başka özelliği)
ile bir filtreleme işlevi artık ekleyebilir, böylece
Bazı özelliklerin örtük parametreler almasını istiyorum. Bu, tasarım perspektifinden hala mantıklı geldiğinden ve uygulamada kafa karıştırıcı olmasından dolayı mutluyum. Ancak, derleyiciyi onunla çalışmaya ikna edemiyorum.Sorunun özü, örtük olarak işaretlenebilecekleri şekilde bir özellik için yapıcı argümanları sağlayamayacağım gibi görünüyor. Bir yöntem uygulaması içinde örtük parametreye başvurulması beklenen "örtülü değer bulamadı" mesajı ile derlenemedi; Ben
implicit val e = implicitly[ClassName]
aracılığıyla yöntemle içinde kullanılabilir olmasının (pratikte, bu kapsamda, hep) inşaat aşamasından itibaren örtük "yaymak" çalıştı ama tanım ki (hiç şüphesiz olarak birçoğunuz bekliyoruz) aynı mesajla başarısız oldu.
Buradaki problem, derleyicinin, özelliğinin implicit ClassName
bayrağın kendisinin imzasını etiketlemesi için ikna edemediğimi ve örtük sağlamak için arayanları (örneğin, özelliği bir nesneye karıştıran kişileri) zorlayabilmesidir. . Şu anda arayanlar yapıyor, ancak derleyici bu seviyede kontrol etmiyor.
belli implicits inşaat anda kullanılabilir olmasını gerektiren olarak bir özelliği işaretlemek için herhangi bir yolu var mı?
(Ve değilse, bu basitçe henüz uygulanmadı veya bu pratik değildir neden daha derin bir sebebi var mı?) Aslında
Bu, arayanın anonim bir nesnede olsa da, açık bir şekilde 'implWrap' tanımlamasını yapmaz mı? (Değilse, nasıl ayarlandığını anlamıyorum; açıklamayı ister misiniz?) –
Evet, ancak yorumu görün: eğer örtük kullanımı kullanmak istiyorsa, yalnızca “val implWrap = ClassNameW” yazabilir. Bunu yapmanın daha iyi bir yolunu görmüyorum: soruda bahsettiğiniz gibi, özellikler sadece _any_ yapıcı parametrelerine sahip değildir (örtük olarak işaretlenebilir). –
Elbette, daha iyi bir çözüm görmekten çok memnun olurum. –