2012-07-22 68 views
2

TreeLoc是一個樹構建他的每一個節點的TreeLoc的樹,在scalaz

拉鍊我有一個歷史性的行動中被存儲在一個樹(以存儲遊戲保存中不同的最終狀態)。所以基本上我的遊戲中有TreeLoc[Action](知道哪個節點是當前的最終狀態)。

所以現在我希望我的用戶能夠進入這個歷史性的。所以,我想是提出了他的行動樹和,當他在節點上單擊,我計算並通過同根樹的TreeLoc但重點放在右邊節點代替我的歷史。這將是無用的創造每TreeLoc關聯與每個節點,所以我認爲這將是一個很好的解決方案,以找到一種方法來改變我Tree[Action](這是目前TreeLoc[Action].toTree)Tree[(Action,() => TreeLoc[Action])].我怎麼能做出這種事情?

回答

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

它應該工作,但我的情況是行動的情況下,類,我可以有相同的情況下,類兩個動作,但EQ它應該工作。 – Atol 2012-07-23 00:47:42

+2

記住,==是Scala結構平等不是一個參考比較,並且,對於一個案例類,這是產生。不會考慮使用不同數據的兩個操作==。 – 2012-07-23 09:55:35

相關問題