创建特质实例

时间:2015-06-29 17:59:39

标签: scala

鉴于以下内容:

scala> trait Bip[T]
defined trait Bip

scala> trait Bop[R <: Bip[R]] 
defined trait Bop

我的理解是R的上限是Bip[R]类型。如果是这样,我不清楚哪种类型可以满足这种约束。

例如,如果我想创建Bop[Int],那么以下least upper bound是否已解析为Any

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> lub(List(typeOf[Int], typeOf[Bip[Int]]))
res22: reflect.runtime.universe.Type = Any

1 个答案:

答案 0 :(得分:1)

这看起来像是F-bounded多态的一个例子(有一个简短的解释here)。你不能创建Bop[Int]之类的东西,但是很容易创建一个满足约束的新的递归定义类型:

scala> case class Foo(bar: String) extends Bip[Foo]
defined class Foo

scala> trait Baz extends Bop[Foo]
defined trait Baz

因此,唯一可以满足R的类型是那些被定义为扩展Bip参数化的类型。