has___()
尝试了REPL:
class Outter {
type Inner = Either[Int, String]
def f(x: this.Inner) = 1
}
val o = new Outter
val someLeft = Left(1)
o.f(someLeft)
由于scala> :load Learn.scala
Loading Learn.scala...
defined class Outter
o: Outter = Outter@28037ced
someLeft: scala.util.Left[Int,Nothing] = Left(1)
res0: Int = 1
具有明确的路径依赖类型参数(Outter.f()
),这意味着仅那些x: this.Inner
(或者允许Left
({1}}的(子类型),不只有Right
或o.Inner
。我希望看到类型不匹配错误:
必填Left[Int,_]
,找到Right[Int,_]
。
但它只编译好!我(很难)在这里失踪了什么?
答案 0 :(得分:3)
type Inner = Either[Int, String]
只是一种类型别名。这是预期的行为。
只允许那些({1}}的(子类型)左派(或权利),而不仅仅是
o.Inner
或Left[Int, _]
。
分别只有一个Right[Int, _]
和一个Left
类。没有Right
或Left
仅 是<{1}}的子类型而没有其他内容。创建类型别名不会创建仅属于类Right
的新类型。 o.Inner
唯一独有的是别名Outter
,但Outter
与旧版Inner
相同。