2017-01-02 101 views
0

我已經定義了以下類:在scala中,爲什麼類中的類型別名不能被繼承?

文件:PyRef.scala:

package mypackage 
class PyBinding() { 
... 
} 

trait PyRef { 

    type Binding = PyBinding 
} 

文件:Link.scala:

class Link() extends PyRef { 

    override type Binding = Link.PyBindingImpl 
} 

object Link { 
    class PyBindingImpl() extends PyRef#Binding() { 
    } 
} 

在編譯,被拋出了以下錯誤:

Error:(222, 34) class type required but mypackage.PyBinding found 
       ) extends PyRef#Binding() { 

爲什麼會發生這種情況,我該怎麼辦才能繞過它?我使用的是Scala 2.10。

+0

我想你正在嘗試與[typeclasses](https://tpolecat.github.io/2015/04/29/f-bounds.html)和[輔助模式](https://gigiigig.github.io/posts/2015/09/13/aux-pattern.html)。 – Reactormonk

+0

聲明類型綁定爲協變或綁定<:PyBinding打破了一些其他函數的類型檢查,我不確定它是否值得。 – tribbloid

+0

@tribboid ...我給了你一個不好的文檔,這讓你錯過了這一點。試試這個:http://typelevel.org/cats/typeclasses.html – Reactormonk

回答

0

我不認爲你可以在Scala中使用類型預測A#B作爲可實例化的類類型。以下兩件事情工作

trait Link { 
    class PyBindingImpl() extends PyBinding() 
} 

trait Link { 
    val ref: PyRef 

    class PyBindingImpl() extends ref.Binding() 
}