PriorityQueue
이 포함 된 데이터 구조를 만들려고합니다. 나는 그것의 비 제네릭 버전을 만드는 데 성공했습니다. 나는 그것이 A.I.를 해결하기 때문에 효과가 있다고 말할 수 있습니다. 내가 가진 문제.
여기 그것의 조각입니다 :암시 적으로 PriorityQueue (Scala)를 사용하여 문제가 발생했습니다.
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]
...
나는 또한 무엇을 시도했다가
//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)
01 : 대신 여기
[T <% Ordered[T]]
을 사용하는 주석이 PQ
를 호출하는 코드입니다
나는 암시적인 def를 Node
객체로 옮겨 보았습니다. (그리고 가져 오는 것), 근본적으로 같은 문제입니다.
일반 버전에서 내가 뭘 잘못하고 있니? 어디에서 암시 적으로 넣어야합니까?
솔루션 문제는 내 내재 된 정의하지이었다. 문제는 for(...) yield(...)
문에서 자동으로 생성 된 Set
에 의해 암시 적 정렬이 선택되었습니다. 이로 인해 yield 된 집합에 하나의 상태 만 포함 된 문제가 발생했습니다.
내 노드에서'Ordering [Node]'를 확장하려고 시도했습니다. 'Node (노드) '와 관련된 다른 메소드 호출에서 많은 문제가 발생했습니다. 다음은 일부입니다. 그들 : - 충분하지 인수 - 유형 \t scala.collection.generic.CanBuildFrom에 대한 암시 적 확장을 발산 [main.Moves.ValueSet이 옵션은 [main.Node, 그건]이 객체의 방법 \t newCanBuildFrom로 시작하는이 \t를 SortedSet의 메서드 맵 : (암시 적 bf : \t scala.collection.generic.CanBuildFrom [main.Moves.ValueSet, 옵션 [main.Node], 그]]) 그. 지정되지 않은 값 \t 매개 변수 bf – Tombstone
@ 툼 스톤 :'Node' 클래스를'Ordering [Node]'로 확장시키지 않으면'Node'의 순서 관계를 정의하는'Ordering [Node]'를 확장하는 클래스를 정의합니다. 'compare' 메소드를 정의합니다. –
Ordering [Node]를 확장 한 새로운 클래스를 만들었습니다. 고맙습니다. 나는 아직도 implicits에 관한 질문이있다. 어떻게 내 이전 implicits 작동하지 않았다? '암시 데프 nodeOrderer 주문할 [노드] 새로운 순서 = [노드] { \t DEF 비교 (일부 : 노드 기타 : 기지국) = some.compare (기타) }' '암시 브로 ordN 주문할 [노드 ] – Tombstone