Oto uproszczenie tego, co napotkałem. To kompiluje:Implicity i kolejność deklaracji
trait A { implicit val x = 1 }
trait B extends A { val y = implicitly[Int] }
Chociaż nie robić (nie mógł znaleźć wartość niejawny):
trait B extends A { val y = implicitly[Int] }
trait A { implicit val x = 1 }
Starałem się uczynić moje intencje jasne, określając siebie-Type: trait A { this: B => ... }
, ale bezskutecznie .
Jak radzić sobie z tego rodzaju zależnościami bez martwienia się o to, w jaki sposób mój kod jest układany?
Co z ukrytymi obiektami? Czy możesz wskazać mi części specyfikacji dotyczące rozdzielczości implicitów? 'cecha X; cecha B rozszerza A {val y = niejawnie [X]}; cecha {niejawny obiekt x rozszerza X} ' – elbowich
Przepraszamy za późną odpowiedź. Po bardziej pobieżnym spojrzeniu w specyfikację nie mogłem znaleźć reguły. Wspomina się jednak, że w [tym raporcie o błędzie] (https://issues.scala-lang.org/browse/SI-801) wygląda to tak, jak robi to implementacja, ale jeszcze nie dotarło do specyfikacji. Nie rozumiem, dlaczego nie powinien działać z niejawnym obiektem. –