斯卡拉自我通用的非法继承
基本这是我正在尝试做的。 具有成员和另一个继承该成员并初始化该成员的特征的特征。 然后是一个类,该类需要一个必须从第一个特征继承并访问该成员的泛型类型
object main extends App{
val z =  new c[b]()
  z.p()
}
trait a{
  val x : String
}
trait b extends a {
  val x = 1
}
class c [A <: a]  {
  self: A =>
  def p(): Unit ={
    print(x)
  }
}
但在线
val z =  new c[b]()
c [b]加下划线,编译器抱怨
“非法继承,自我类型c [b]不符合A”
我想定义从父特征继承的多个特征,然后定义一个接受父特征之一并访问其值的类
我找到了答案,我只需在创建对象时扩展对象,如下所示:
object main extends App{
val z =  new c[b] with b
  z.p()
}
trait a{
  val x : String
}
trait b extends a {
  val x = "1"
}
class c[A <: a]{
  this: A =>
  def p(): Unit ={
    print(x)
  }
}
