我想要一个使用类型界限和类型更高的类型的类型投影别名,但是它意外失败。在Scala 2.12.8和2.13.0中尝试过
以下作品:
object Testing {
trait One[A] {
trait Two[B <: A]
}
type Test = One[Int]#Two[Int]
}
,以下失败:
object Testing {
trait One[A] {
type Two[B <: A] = Altogether[A, B]
}
trait Altogether[A, B <: A]
type Test = One[Int]#Two[Int]
}
有错误
type arguments [Int] do not conform to type Two's type parameter bounds [B <: A]
我希望第二个示例也可以编译。
以下作品:
type Test = Altogether[Int, Int]
有人可以提出替代方案吗?
答案 0 :(得分:3)
如果将trait
替换为type
,它将按预期工作:
type One[A] = {
type Two[B <: A] = Altogether[A, B]
}
trait Altogether[A, B <: A]
type Test = One[Int]#Two[Int]
经过Scala 2.13的测试。