2010-12-02 64 views
2

我有一本字典,我用它來存儲使用參數名稱的另一個字典。在愛爾蘭的字典中存儲字典

我得到一個右側不匹配錯誤。

這裏是我的代碼

handle_cast({setState, Id}, State) -> 
Id0 = dict:new(), 
DQueue = queue:new(), 
UQueue = queue:new(), 
Id1 = dict:store(dQueue, [DQueue], Id0), 
Id2 = dict:store(uQueue, [UQueue], Id1), 
Id3 = dict:store(dSpeed, [], Id2), 
Id4 = dict:store(uSpeed, [], Id3), 
D = dict:store(Id, [Id4], State), 
State = D, 
{noreply, State}; 

林不知道哪裏錯誤的來源。我認爲這可能是因爲我將Id作爲主字典中的關鍵字,並以新的內部字典作爲值。

我需要內部字典的名稱作爲Id的值,因爲它們中會有很多,我需要稍後通過Id訪問它們。

我是否正確設置字典? erlang是否允許字典持有字典?

感謝

回答

5

沒有嘗試的代碼,我敢打賭,你badmatch鑑於State是在函數的頭部已經被綁定在做State = D時。除此之外,USpeedDSpeed應該是未定義的,除非您複製/粘貼您的功能錯誤。

+0

謝謝。我改變了一些東西。它是uni項目的一部分:P我現在將編輯這些感謝。所以我應該讓它例如NewState = D. {noreply,NewState}。 ? ;) – jarryd 2010-12-02 23:11:46

+0

要麼或只是`{noreply,D}` – 2010-12-02 23:31:34

3

如何重寫:

handle_cast({setState, Id}, State) -> 
    D = dict:from_list([{dQueue, [queue:new()]}, 
         {uQueue, [queue:new()]}, 
         {dSpeed, []}, 
         {uSpeed, []}], 
    {noreply, D}; 

這是簡單的閱讀,避免了命名的麻煩和大約相同的速度。