作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Scala 还很陌生,一直在尝试学习和理解隐式转换和参数,但遇到了一个让我感到困惑的场景。
对于上下文,我正在使用 Scaldi 在 Akka 应用程序中进行依赖注入(inject),并希望从抽象类继承多个可注入(inject)的 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 {}
最佳答案
确定 Scala 编译器在何处查找隐式的确切规则有点复杂,但在大多数情况下,您只需要考虑隐式值可能来自两个地方:
class SecretSauce {}
object SecretSauce {
implicit val secretSauce: SecretSauce = new SecretSauce()
}
abstract class Base(implicit secretSauce: SecretSauce) {}
object Example extends App {
class Concrete extends Base {}
}
class SecretSauce {}
abstract class Base(implicit secretSauce: SecretSauce) {}
object Example extends App {
implicit val secretSauce: SecretSauce = new SecretSauce()
class Concrete extends Base {}
}
class Concrete extends Base {}
SecretSauce
值,它将首先查看该行范围内的隐式值,然后查看
SecretSauce
伴随对象(如果存在)。它也没有找到,所以它拒绝编译你的代码。
关于scala - Scala中的隐式抽象类构造函数参数和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143679/
我是一名优秀的程序员,十分优秀!