我想實現一個基於HashMap的樹,將支持O(1)子樹查找給定的根密鑰。爲了這個目標,我想做到以下幾點:斯卡拉:圍繞「非法循環參考」
scala> type Q = HashMap[Char, Q]
<console>:6: error: illegal cyclic reference involving type Q
type Q = HashMap[Char, Q]
^
所以現在的問題是,有沒有辦法爲我做了類似的東西,而不訴諸醜陋HashMap[Char, Any]
一起HashMap[Char, Any]
數值的連續鑄造?
現在,我也看到我可以使用類似於以下的內容來避免循環引用錯誤,它甚至可能更清晰 - 但它很好找出如何正確地以第一種方式執行它,只是爲了教育的價值。
import collections.mutable.HashMap
class LTree {
val children = new HashMap[Char, LTree]
}
謝謝你一堆。
你能澄清你想要定義什麼樣的結構嗎?一棵樹的圓弧標有一個「Char」,並且它的節點根本沒有任何信息?如果是這樣的話,你的'LTree'儘可能小,儘管如你所寫,你只能創建空樹,因爲'children'和HashMap'一樣是不可變的,而構造函數沒有參數。 – 2010-04-28 21:21:18
感謝您的評論Randall。我剛剛調整了上面的列表來指示(因爲它在我的源代碼中)所使用的HashMap是可變的。 用例確實是一個帶有char標籤的邊和不含任何信息的節點的有向圖。這實際上是一個基本的DFA,其葉節點隱含地被視爲最終狀態。 無論如何,上述內容與scala語法問題無關 - 我想我給出的一小段代碼是一種解決方法,我只是很好奇,是否有辦法更簡潔地做到這一點,就像在第一個列表中建議。 – 2010-04-28 22:19:00
實際上,當然,使用'LTree'的第二種方法更合適,因爲我可以在各種樹操作中折騰其內的字段和成員函數。 – 2010-04-28 22:19:51