Scala 自引用视图/上下文绑定

Scala 自引用视图/上下文绑定,scala,context-bound,Scala,Context Bound,事实上,我不清楚以下是一个视图还是上下文约束。还不清楚自引用方面(重新引用模型)在做什么;): 抽象类模型[M那么问题是什么?@AlexeyRomanov OP UpdateUpper类型边界一般都会被解释。你想要一些理论背景还是关于自引用方面的更详细的例子?好的,谢谢你指出这是一个类型边界。现在我仍然不明白为什么边界在模型[M]上这是一个自引用类型绑定。我已经扩展了我的示例。 abstract class Model[M <: Model[M]] extends Transformer

事实上,我不清楚以下是一个视图还是上下文约束。还不清楚自引用方面(重新引用模型)在做什么;):


抽象类模型[M
那么问题是什么?@AlexeyRomanov OP UpdateUpper类型边界一般都会被解释。你想要一些理论背景还是关于自引用方面的更详细的例子?好的,谢谢你指出这是一个类型边界。现在我仍然不明白为什么边界在模型[M]上这是一个自引用类型绑定。我已经扩展了我的示例。
abstract class Model[M <: Model[M]] extends Transformer {
object Main extends App {
  val a: ModelA1 = foo(new ModelA1(), 2)
  val b: ModelA1 = foo(new ModelA2(), 3)
  val c: ModelB1 = bar1(new ModelB1())
  val d: ModelA1 = bar2(new ModelB2())

  def foo[M <: ModelA[M]](model: Model[M], n: Int): M = model.transform.fooN(n)

  def bar1[M <: ModelB[M]](model: Model[M]): M = model.transform.bar

  def bar2[M <: Model[M]](model: ModelB[M]): M = model.bar.transform
}

abstract class Model[M <: Model[M]] {
  def transform: M
}

abstract class ModelA[M <: ModelA[M]] extends Model[M] {
  def foo: M

  def fooN(n: Int): M = {
    var x: M = this.foo
    for (_ <- 2 to n)
      x = x.foo
    x
  }
}

abstract class ModelB[M <: Model[M]] extends Model[M] {
  def bar: M
}

class ModelA1 extends ModelA[ModelA1] {
  override def transform: ModelA1 = ???
  override def foo: ModelA1 = ???
}

class ModelA2 extends ModelA[ModelA1] {
  override def transform: ModelA1 = ???
  override def foo: ModelA1 = ???
}

class ModelB1 extends ModelB[ModelB1] {
  override def transform: ModelB1 = ???
  override def bar: ModelB1 = ???
}

class ModelB2 extends ModelB[ModelA1] {
  override def transform: ModelA1 = ???
  override def bar: ModelA1 = ???
}