Я новичок в Scala и пытался изучить и понять неявные преобразования и параметры и столкнулся со сценарием, который меня сбивает с толку.
Для контекста я использую Scaldi для внедрения зависимостей в приложении Akka и хотел бы, чтобы несколько внедряемых акторов унаследовали от абстрактного класса. Я считаю, что не могу сделать абстрактный класс чертой именно потому, что нам нужно сделать неявный Injector
доступным через аргумент конструктора, чтобы воспользоваться преимуществами фреймворка.
Очень надуманный пример, демонстрирующий поведение, которое я наблюдаю, выглядит следующим образом:
class SecretSauce {}
abstract class Base(implicit secretSauce: SecretSauce) {}
class Concrete extends Base {}
object Example extends App {
... // Setup Actor system, etc, etc
implicit val secretSauce: SecretSauce = new SecretSauce()
}
Я ожидал, что все заработает, но вместо этого получаю ошибку компиляции:
Unspecified value parameter secretSauce.
class Concrete extends Base {
^
Если я добавлю неявный параметр к конкретному классу, например, все заработает:
class Concrete(implicit secretSauce: SecretSauce) extends Base {}
Я думаю, что моя путаница связана с тем, как работают неявные параметры - в ситуациях, подобных той, которую я описываю, не наследуются ли они дочерними классами? Может ли кто-нибудь ELI5, что происходит в моем примере, или указать мне ссылку, которая может помочь прояснить ситуацию?
Спасибо!