3
說我有一個類中的性狀以下簡單的斯卡拉定義中:斯卡拉 - 走樣類型的類型
class Foo {
trait Bar
}
val f = new Foo
type MyAlias = f.Bar
這讓我別名Bar
與MyAlias
。但是,如果我試圖內聯讀取type MyAlias = (new Foo).Bar
編譯抱怨。它爲什麼會抱怨,並有一種方法可以實現這一點?
說我有一個類中的性狀以下簡單的斯卡拉定義中:斯卡拉 - 走樣類型的類型
class Foo {
trait Bar
}
val f = new Foo
type MyAlias = f.Bar
這讓我別名Bar
與MyAlias
。但是,如果我試圖內聯讀取type MyAlias = (new Foo).Bar
編譯抱怨。它爲什麼會抱怨,並有一種方法可以實現這一點?
具有Scala中的類型的.
運算符用於路徑相關類型。例如,您的f.Bar
是Bar
的一個實例,它以f
作爲其父項。編譯器禁止(new Foo).Bar
,因爲它不是一個有用的表達式 - 你扔掉唯一的Foo
可以用來創建該類型的實例,所以沒有值能夠滿足該別名。你可能想要的是Foo#Bar
。這不是一個路徑依賴類型。任何Bar
,無論與Foo
相關聯,都是Foo#Bar
。
下面是一個例子:
class Foo {
class Bar
}
val f1 = new Foo
val f2 = new Foo
val b1 = new f1.Bar
val b2 = new f2.Bar
// This won't compile, because b2 is a f2.Bar, not an f1.Bar
// val pathDependentBar: f1.Bar = b2
val FooHashBar: Foo#Bar = b1
請參閱解釋一下:http://stackoverflow.com/a/12959947/384442 – RomanI