在 Scala 中的类型别名中为类型成员建立边界
Establish bounds for type members within a type alias in Scala
鉴于:
trait Record {
type ID
val id: ID
}
trait DataSource {
type ID
def read(id: ID): Try[R]
}
我希望能够笼统地描述 read
函数。
type Reader[R <: Record, DS <: DataSource] = (DS#ID) => Try[R]
我如何保证这里的类型安全,使得 DS#ID
不会是与 R#ID
不同的类型?
我试过了...
type Reader[R <: Record, DS <: DataSource, R#ID <: DS#ID] = (DS#ID) => Try[R]
但是那不能编译。这种情况的正确语法是什么?
在处理Reader
的类型参数时,ID
必须作为自己的参数被拉出来。
type Reader[R <: Record, DS <: DataSource, ID] = (ID) => Try[R]
一旦完成,就可以在其上放置额外的边界...
type Reader[R <: Record, DS <: DataSource, ID <: DS#ID =:= R#ID] = (ID) => Try[R]
鉴于:
trait Record {
type ID
val id: ID
}
trait DataSource {
type ID
def read(id: ID): Try[R]
}
我希望能够笼统地描述 read
函数。
type Reader[R <: Record, DS <: DataSource] = (DS#ID) => Try[R]
我如何保证这里的类型安全,使得 DS#ID
不会是与 R#ID
不同的类型?
我试过了...
type Reader[R <: Record, DS <: DataSource, R#ID <: DS#ID] = (DS#ID) => Try[R]
但是那不能编译。这种情况的正确语法是什么?
在处理Reader
的类型参数时,ID
必须作为自己的参数被拉出来。
type Reader[R <: Record, DS <: DataSource, ID] = (ID) => Try[R]
一旦完成,就可以在其上放置额外的边界...
type Reader[R <: Record, DS <: DataSource, ID <: DS#ID =:= R#ID] = (ID) => Try[R]