İlk olarak, neden bir MatchError
görüyorsunuz. Bir nesne üzerindeki bir değer (A.f), kararlı bir tanımlayıcı olarak kabul edilir (Scala referansı, "Kararlı üyeler [...] nesne tanımları veya uçucu olmayan türlerin değer tanımları tarafından tanıtılan üyelerdir"). desen eşleştirme içine
bir görev kullanılan
object A extends scala.AnyRef {
...
private[this] val f: String = "Object A";
<stable> <accessor> def f: String = A.this.f
}
, derleyici "desugars" Bu kararlı tanımlayıcı atama (kararlı olmak gerekli bir koşuldur): Burada
gibi Typer çıkışı nasıl göründüğü ve
<synthetic> private[this] val x$1: Unit = ("Object B": String("Object B") @unchecked) match {
case A.f =>()
}
"Object A" desenine karşı "Object A" ile eşleşemez, bu nedenle MatchError
atar.
Büyük sorunuz için: tamamlayıcı bir nesnede bulunan değerleri ve yöntemleri geçersiz kılmanız/kullanmamalısınız. Polimorfizm, sınıflara ve örneklerine, statik yöntemlere veya değerlere uygulanmaz. Programınızı, eşlik eden bir nesnede geçersiz kılmayı/kusurları geçersiz kılmayan, düşünmeniz için muhtemelen daha iyi bir yol vardır.
Teşekkür yapabilirsiniz! Genelde eşlik eden nesneleri geçersiz kılma ihtiyacında size katılıyorum, ancak burada yapmak istediğim neden, başka bir yöntemle eşlik eden nesnenin içindeki bir yöntemi değiştirmek istediğim test amaçlıdır. Ayrıca, bazı diller statik yöntemlerin geçersiz kılmasına izin verir. – deepkimo