Scala - 将特征与其导入混合(继承导入)

标签 scala inheritance import

我有以下代码:

trait A {
  import org.somepackage.C._
}

class B extends A {
  def getValue = value
                 ^^^^^
}

object C {
  var value = 5
}

类中的值 B不可见是什么意味着类 A 的固有导入不是由 B 继承的,虽然 value在内部完全可见 A .如何实现也继承导入的效果,以便我可以避免在 trait A 的多个类中显式导入相同的东西混入?

最佳答案

不是一流实体的导入不会表现出您期望的行为。您可以改为重构您的设计以实现接近的目标:

trait A with C {

}

class B extends A {
  def getValue = value // Now this will work.
}

trait C {
  var value = 5
}

object C extends C

这个习惯用法在 Scalaz 6 中使用,以尽可能少的进口对用户征税。

关于Scala - 将特征与其导入混合(继承导入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307567/

相关文章:

scala - 在 Scala 中将文件名拆分为绝对路径

scala - 如何在 Scala 的主构造函数中定义局部 var/val?

C#:有什么理由不应该声明事件支持字段 protected ?

Python - 来自 .进口

scala - 水平连接多个数据框

Scala:如何在父类(super class)上实现克隆方法,并在子类中使用它?

c++ - 虚拟继承如何解决 "diamond"(多重继承)的歧义?

CSS 变量继承和回退

python - FROM random IMPORT* 和 IMPORT random 有什么区别? (随机()和随机范围())

导入时的postgresql和排序规则问题