如何让 trait 在 scala 中使用 'this' 构造函数?



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

我希望在trait内调用构造函数。 但似乎我必须使用apply功能。它是否存在像新这个((这样的用法?

就像下面的代码一样。它引发类型不匹配。我希望添加构造函数的约束,否则我必须使用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 中的"当前"类型https://tpolecat.github.io/2015/04/29/f-bounds.html

相关内容

  • 没有找到相关文章

最新更新