を含むデータ構造を作成しようとしてPriorityQueue
います。私はそれの非一般的なバージョンを作ることに成功しました。私が抱えている AI の問題を解決してくれるので、うまく機能していると言えます。
ここにそのスニペットがあります:
class ProntoPriorityQueue { //TODO make generic
implicit def orderedNode(node: Node): Ordered[Node] = new Ordered[Node] {
def compare(other: Node) = node.compare(other)
}
val hashSet = new HashSet[Node]
val priorityQueue = new PriorityQueue[Node]()
...
私はそれを汎用にしようとしていますが、このバージョンを使用すると問題の解決が停止します:
class PQ[T <% Ordered[T]] {
//[T]()(implicit val ord: T => Ordered[T]) {
//[T]()(implicit val ord: Ordering[T] {
val hashSet = new HashSet[T]
val priorityQueue = new PriorityQueue[T]
...
使用する代わりにコメントアウトされたものも試しました[T <% Ordered[T]]
を呼び出すコードは次のPQ
とおりです。
//the following def is commented out while using ProntoPriorityQueue
implicit def orderedNode(node: Node): Ordered[Node] = new Ordered[Node] {
def compare(other: Node) = node.compare(other)
} //I've also tried making this return an Ordering[Node]
val frontier = new PQ[Node] //new ProntoPriorityQueue
//have also tried (not together):
val frontier = new PQ[Node]()(orderedNode)
また、暗黙の定義をNode
オブジェクトに移動(およびインポート)しようとしましたが、本質的に同じ問題です。
ジェネリックバージョンで何が間違っていますか? 暗黙的なものはどこに置くべきですか?
解決策
問題は私の暗黙の定義にありませんでした。問題は、ステートメントSet
で自動的に生成された によって暗黙的な順序付けが選択されていたことです。for(...) yield(...)
これにより、生成されたセットに 1 つの状態しか含まれないという問題が発生しました。