context:这是使用scala-3
final case class TableSchema[T[_[_]] <: Table]( /* ... */ )
// None of these work...
final case class Schema(tableSchemas: List[TableSchema[_ <: Table]])
final case class Schema(tableSchemas: List[[t[_[_]] <: Table] => TableSchema[t]])
final case class Schema(tableSchemas: List[[t[_[_]] <: Table] =>> TableSchema[t]])
final case class Schema(tableSchemas: List[TableSchema[_[_[_]] <: Table]]) // isnt even valid syntax?
我想,正确的是
final case class Schema(tableSchemas: List[TableSchema[_ <: ([_[_]] =>> Table)]])
或不带额外支架
final case class Schema(tableSchemas: List[TableSchema[_ <: [_[_]] =>> Table]])
即存在类型TableSchema[_]
的未知参数_
是常量类型Table
的子类型。
来自 Lambda 类型的引述 - 更多详细信息/与参数化类型定义的关系:
参数化抽象类型
type T[X] >: L <: U
被视为非参数化抽象类型的简写 键入 lambda 作为边界。
type T >: ([X] =>> L) <: ([X] =>> U)
在 Scala 3.1.3 中测试。