Scala'nın birden fazla mirası desteklemediğini söylediğinde, bir yöntem uygulamasını birden çok kez devralmayı ifade eder. Tabii ki, bir sınıfta birden fazla arabirim / özellik uygulayabilir ve hatta aynı yöntemi tanımlayabilirler, ancak özellik doğrusallaştırması nedeniyle farklı uygulamalar arasında çakışma olmaz.
Bir sınıfı varsa Genelde, C1
bir yöntem ile f()
ve bir sınıf C2
yöntemi ile de f()
çoklu kalıtım aracı daha sonra, bir şekilde iki uygulamaları devralabilir f()
. Bu, Scala'nın yalnızca tek bir sınıftan miras almanıza izin vererek ve birden fazla özellik olması durumunda özelliklerin sırasına göre bir uygulama seçerek çözdüğü çeşitli sorunlara yol açabilir.
İşlere gelince Nothing
, gerçekten basittir, çünkü hiçbir şeyin tanımlanmış özniteliği veya yöntemi yoktur. Yani miras çatışmaları yaşayamazsınız. Ancak, sürprizinizin çoğunun farklı bir çoklu miras anlayışından geldiğini varsayıyorum.
Eğer özellik doğrusallaştırması etkili bir miras belirsizliği ortadan kaldırır ve bunu birden çok özelliklerin devralmaya atıfta olmadığını anladığınızda çoklu miras nedeniyle buna, o zaman iyi olmalıdır.
Bunun nasıl gerçekleştiğine gelince: derleyici bundan sorumludur. Bkz Scala dil özellikleri diğer özellikleri arasında içeren bölüm 3.5.2 uyumu:
For every type constructor T (with any number of type parameters), scala.Nothing <: T <: scala.Any.
Başka bir deyişle, bir derleyiciyi doğru bir şekilde uygulamak istiyorsanız, Nothing
belirtime göre her şeyin bir alt türü olarak işlemesi gerekir . Açık nedenlerden ötürü, Nothing
sisteme yüklenen tüm sınıflardan uzatılacak şekilde tanımlanmamıştır, ancak Nothing
alt tür olarak tanımlamanın uygunluğu, alt türlemenin ilgili olduğu tüm yerlerle sınırlıdır.
Burada önemli bir nokta, hiçbir tip örneğinin bulunmamasıdır Nothing
, bu nedenle, tedavisi kesinlikle derleyicinin alanında olan tip kontrolüyle sınırlıdır.