2012-07-22 1 views
2

TreeLoc 내가 저장하기 위해 (트리에 저장되어있는 게임에서 액션의 역사를 가지고 나무

의 지퍼 scalaz에, 자신의 각 노드의 TreeLoc의 트리를 구성 저장의 다른 최종 상태). 따라서 기본적으로 내 게임에는 TreeLoc[Action]이 있습니다 (어떤 노드가 현재 최종 상태인지 알기 위해).

이제 내 사용자가이 역사적인 자료로 이동할 수 있기를 바랍니다. 그래서 내가 원하는 것은 그에게 자신의 행동 트리를 제시하는 것입니다. 노드를 클릭하면 내 역사를 계산하고 동일한 루트 트리의 TreeLoc으로 바꾸지 만 올바른 노드에 포커스를 둡니다. 이는 각 노드와 모든 TreeLoc 동료를 만들 쓸모없는 것, 그래서 그것을 변환 할 수있는 방법을 찾기 위해 좋은 해결책이 될 것이라고 생각 내 Tree[Action] (내가 그런 일을 할 수있는 방법 Tree[(Action,() => TreeLoc[Action])].에 현재 TreeLoc[Action].toTree)이다?

답변

3

제대로 이해하지 못했을 수 있으므로 제발 정정하십시오.

사용자에게 제시하는 [작업]이 있고, 사용자가 해당 트리에서 노드를 선택하고 TreeLoc에 집중하기를 원할 때 선택된 노드는 맞습니까?

이와 비슷한 것이 있습니까?

val tree : Tree[Action] = // build your tree 

def select(userSelected: Action) : Option[TreeLoc[Action]] = { 
    tree.loc.find(_.getLabel == userSelected) 
} 

반환 된 TreeLoc은 일치하지만 같은 트리에 뿌리를 둔 노드에 초점을 맞 춥니 다.

분명히 find()가 원하는 것이 아니기 때문에 고유 ID가 평등 테스트보다 더 나을 것입니다.

+0

작동해야하지만 제 경우에는 Action이 case 클래스이고 두 개의 Action에 대해 동일한 case 클래스를 가질 수 있지만 eq로 작동해야합니다. – Atol

+2

==는 참조 비교가 아닌 Scala의 구조적 동일성이며 사례 클래스의 경우 생성된다는 것을 명심하십시오. 다른 데이터를 사용하는 두 가지 작업은 고려되지 않습니다. –