如何让特征在scala中使用`this`构造函数?

How to let trait use `this` constructor in scala?

[编辑更新]这是对我的问题的正确陈述。

希望在trait里面调用构造函数。 但似乎我必须使用 apply 功能。是否存在像 new this() 这样的用法?

喜欢下面的代码。它抛出类型不匹配。我希望添加构造函数的约束,或者我必须使用apply函数。

  trait B { this:C =>
    def values:Seq[Int]
    def apply(ints:Seq[Int]):this.type
    def hello:this.type = apply( values map (_ + 1) )
  }

  trait C

  class A(val v:Seq[Int]) extends C with B{
    override def values: Seq[Int] = v

    override def apply(ints: Seq[Int]): A.this.type = new A(ints)
  }

this.type 是这个特定实例的类型。所以你可以写

override def hello = this

但是你不会写

override def hello = new A()

因为 Athis.type 的超类型。

可能你想要

trait B { this: C =>
  type This <: B /*or B with C*/
  def hello: This
}

trait C

class A extends C with B {
  type This = A
  override def hello = new A()
}

甚至可能

trait B { self: C =>
  type This >: self.type <: B with C { type This = self.This }
  def hello: This
}

返回 Scala 中的 "Current" 类型 https://tpolecat.github.io/2015/04/29/f-bounds.html