鉴于以下内容:
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
答案 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
参数化的类型。