背景關系:這是使用 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?
uj5u.com熱心網友回復:
我猜,正確的是
final case class Schema(tableSchemas: List[TableSchema[_ <: ([_[_]] =>> Table)]])
或沒有額外的括號
final case class Schema(tableSchemas: List[TableSchema[_ <: [_[_]] =>> Table]])
_即存在型別的未知引數TableSchema[_]是常量型別的子型別Table。
來自Type Lambdas 的參考 - 更多詳細資訊/與引數化型別定義的關系:
引數化抽象型別
type T[X] >: L <: U被視為以 lambdas 型別為邊界的未引數化抽象型別的簡寫。
type T >: ([X] =>> L) <: ([X] =>> U)
在 Scala 3.1.3 中測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510468.html
