Scala 从嵌套类型获取子类型
我看不到获得嵌套类型的子类型的方法,有可能吗Scala 从嵌套类型获取子类型,scala,Scala,我看不到获得嵌套类型的子类型的方法,有可能吗 type IN[A,B] = { type X = A type Y = B } trait INH[IN[A,B]] { type X = IN#X type Y = IN#Y } 但这并没有编译 更新 我将扩展这个案例: 有一些类:A、B、C、N——它们是状态,我想实现路径可靠对象: C-只能从A或B初始化 D-只能从A或B或C初始化 抽象类状态 没有什么 键入!![S]=![![S]] 类型∨[T,U]=![![T]与![
type IN[A,B] = {
type X = A
type Y = B
}
trait INH[IN[A,B]] {
type X = IN#X
type Y = IN#Y
}
但这并没有编译
更新
我将扩展这个案例:
有一些类:A、B、C、N——它们是状态,我想实现路径可靠对象:
抽象类状态
没有什么
键入!![S]=![![S]]
类型∨[T,U]=![![T]与![U]]
类型|∨|[T,U]={typeλ[X]=!![X]您必须按照以下方式执行:
trait IN[A, B] {
type X = A
type Y = B
}
trait INH[T <: IN[_, _]] {
type X = T#X
type Y = T#Y
}
[A,B]中的特征{
X型=A型
类型Y=B
}
你必须按照以下方法来做:
trait IN[A, B] {
type X = A
type Y = B
}
trait INH[T <: IN[_, _]] {
type X = T#X
type Y = T#Y
}
[A,B]中的特征{
X型=A型
类型Y=B
}
talex的答案是正确的,但是请注意,在Scala 3中,这种对抽象类型成员的类型投影是不允许的(2020年之前不会出现)
您的用例似乎有点奇怪,为什么不在
中简单地声明
trait IN {
type A
type B
}
然后,您可以直接作为#A
中的访问A
,或者,最好是在Scala 3中允许,通过IN
中的作为IN.A
访问中的实例
如果希望能够以简洁的方式约束A
、B
或两者,可以使用类型细化并定义别名:
type INWithSpecificA[+AA] = IN {
type A <: AA
}
类型INWithSpecificA[+AA]=IN{
类型Atalex的答案是正确的,但请注意,Scala 3中不允许对抽象类型成员进行这种类型投影(2020年之前不会出现)
您的用例似乎有点奇怪,为什么不在
中简单地声明
trait IN {
type A
type B
}
然后,您可以直接作为#A
中的访问A
,或者,最好是在Scala 3中允许,通过IN
中的作为IN.A
访问中的实例
如果希望能够以简洁的方式约束A
、B
或两者,可以使用类型细化并定义别名:
type INWithSpecificA[+AA] = IN {
type A <: AA
}
类型INWithSpecificA[+AA]=IN{
键入A为什么不简单地在中声明为
-我猜OP创建此项是为了解决类型擦除问题。为什么不简单地在中声明为
-我猜OP创建此项是为了解决类型擦除问题。