Ben şu davranışın daha iyi anlamak için çalışıyorum:Scala tipi sınırları ve varyans
scala> class C[-A, +B <: A]
<console>:7: error: contravariant type A occurs in covariant position
in type >: Nothing <: A of type B
class C[-A, +B <: A]
^
Ancak şu işleri:
scala> class C[-A, +B <% A]
defined class C
Ben gelen sorunlar olabileceğini görebilirsiniz Belirli sorunun ne olduğu konusunda net olmamam rağmen, sınırlayıcı ve sınırlı değişkenlerin tersi varyanstır. Bağlantılı bir görünüme bağlı türün neden değiştirilmesinin neden daha iyi olduğu konusunda daha net değilim. Uygulanabilir örtülü dönüşümlerin yokluğunda, iki tanımın büyük ölçüde aynı etkiye sahip olmasını beklerdim. Bir görüşün, bir görüntünün yanlış anlaşılma için daha fazla fırsat sunmasını beklerdim.
Ben fonksiyonları gibi bazı açılardan olan sınıfları tanımlayan Arka plan biraz içinve ben Muhtemelen
CompositeFunc[-A, +B <: C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
CompositeFunc[-A, +B <% C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
gibi bir şey yapmak istedim aslında tercih edilir, ama yine de olur Burada neler olup bittiğini daha iyi anlamak istiyorum.
İlginç ... Ben 1 saat geçirdim örnek tipi arayan Güvenlik türü, bağlı olan tipte. Yok bulundu :(bağlı tipiyle sağlıklı olmadığını bir örnek olmadığını – gzm0
Ayrıca, giderirdi bağlı bir görünümde yerine nasıl görmek zordur. –
Evet, biraz katılıyorum. Ama temel fark, görüş sınırdır her zaman sınıfın oluşturulduğu türlere göre dönüşüm yapar, buna bağlı olarak yazılan tipte bir durum söz konusu değildir. (en azından sezgilerimi söyler ...) – gzm0