2010-12-02 8 views
2

Ich habe ein Wörterbuch, mit dem ich ein anderes Wörterbuch unter Verwendung des Namens eines Parameters speichern kann.Speichern eines Wörterbuchs in einem Wörterbuch in Erlang

Ich bekomme einen Mismatch-Fehler auf der rechten Seite.

hier ist mein Code

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}; 

Ich bin nicht sicher, wo der Fehler herkommt. Ich dachte, es könnte sein, weil ich Id als Schlüssel im Hauptwörterbuch mit dem neuen internen Wörterbuch als Wert ablege.

Ich brauche den Namen des internen Wörterbuchs, um den Wert der ID zu sein, da es viele von ihnen geben wird und ich später auf sie per Id zugreifen muss.

Richte ich das Wörterbuch richtig ein? Erlaubt erlang Wörterbücher, Wörterbücher zu halten?

Dank

Antwort

5

Ohne den Code versucht, meine Wette ist, dass Sie BadMatch wenn State = D gegeben tun, dass State bereits in der Funktion des Kopf gebunden ist. Darüber hinaus sollten USpeed und DSpeed nicht definiert sein, es sei denn, Sie haben Ihre Funktion falsch kopiert/eingefügt.

+0

Danke. Ich habe ein paar Dinge geändert. Sein Teil eines Uni-Projekts: P Ich werde diese jetzt editieren. Also sollte ich es z. NewState = D. {noreply, NewState}. ? ;) – jarryd

+0

entweder das oder nur '{noreply, D}' –

+0

Wie wirken diese Speicher? Erstellen eines neuen Diktats beim Speichern, Übergeben des alten Diktats? Oder überschreibt es es sofort? – jarryd

3

Wie über eine Rewrite:

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

, die einfacher zu lesen ist, vermeidet Probleme zu benennen und ist etwa die gleiche Geschwindigkeit.

+0

Das ist wirklich gut. Wie später in diesem Modul speichern ich Wörterbücher im Hauptwörterbuch und die Namenskonvention war ein Kampf zu folgen. – jarryd

Verwandte Themen