泛型类型参数的下划线在 Scala 中产生编译错误?

underscore for generic type argument produces compile error in Scala?

我有

trait MyBase[T <: MyBase[T]] {
  def myid: String
}

这么写


case class MyBaseContainer(myBase: MyBase[_])

MyBase

中为 T 产生类型绑定错误
type arguments [_] do not conform to trait MyBase's type parameter bounds [T <: Playground.MyBase[T]]

写成

case class MyBaseContainer[T <: MyBase[_]](myBase: T)

编译时消除所有错误。

为什么会这样? MyBaseContainer 的这两个签名在语义上不是等价的吗?

是否有一种语法方法可以将类型参数 MyBase 限制为所需的范围,而不会将 T 作为类型参数传递给 MyBaseContainer

正如 Dmytro Mitin 在评论中提到的那样,这会起作用:

import scala.language.existentials

case class MyBase[T <: MyBase[T]] (
   myid: String
)


case class MyBaseContainer(myBase: MyBase[T] forSome {type T <: MyBase[T]})