我对 Scala 还很陌生,一直在尝试学习和理解隐式转换和参数,并且遇到了一个让我感到困惑的场景。
对于上下文,我正在使用 Scaldi 在 Akka 应用程序中进行依赖注入,并希望从抽象类继承多个可注入的 Actor。我相信我无法准确地使抽象类成为特征,因为我们需要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 在我的示例中发生什么或指出可以帮助解决问题的参考吗?
谢谢!