私はスカラのスキルを磨いており、いくつかのグラフ化アルゴリズムを書いています。このようなグラフのAPI表現があります
trait GraphLike[T]
{
val vertices: Map[ T, VertexLike[T] ]
def addVertex( t: T ): GraphLike[T]
def addEdge( a:T, b:T ): GraphLike[T]
def getAdjacencyList( a: T ): List[T]
def getVertex( a: T ): VertexLike[T]
...
}
次に、別のクラスがあります。
class DepthFirstSearch[ T ]( val graph: GraphLike[T], val sourceVertex: T )
{
...
}
現在、DepthFirstSearch クラスのインスタンスを作成するには、これを行う必要があることがわかりました
val dfs = new DepthFirstSearch[Integer]( new UnDirGraph[Integer](/*some params*/), 1 )
サブクラスUnDirGraph
はどこですかGraphLike
で型パラメーターを指定する必要がありますnew DepthFirstSearch[Integer]
。提供されたグラフ パラメータからタイプ チェッカーがこれを推測できる方法はありますか。このようなことはできないことがわかりました
val dfs = new DepthFirstSearch( new UnDirGraph[Integer](/*some params*/), 1 )
現在、上記は失敗しています...上記のようなことができる方法はありますか?
編集:だから私が得るエラーメッセージは型の不一致です; found : com.KGraph.GraphLike[Integer]
required: com.KGraph.GraphLike[Any] Note: Integer <: Any, but trait GraphLike is invariant in type T. 代わりに T を +T として定義したいかもしれません。(SLS4.5)
これが私が作成しようとする方法です
val graph = Graphing.createUndiGraphFromFile(
new File("/Volumes/Data/Users/kartik/ScalaSpace/Graph/tinyG.txt" ) )
val dfs = new DepthFirstSearch( graph, 0 )
ここでcrateUndiGraphFromFile
、GraphLike[Integer] を返します