2010-08-16 10 views
6

Ok Ich habe versucht jeden Weg, um dies herauszufinden.Erlang - Globale Variablen .. ja ich weiß, ich weiß

Ich brauche diese Tabelle zu einem globalen .. Ich habe festgestellt, dass es viel weniger effizient ist, TableID um .. im Rahmen meines Programms zu übergeben.

Also versuchte ich dann eine neue Tabelle erstellt wird es aufzublicken:

TableID = ets:new(tb, [set,public]), 
put({tableUniqueID}, TableID), 

Dann habe ich:

get({tableUniqueID}) 

Und in der gleichen Funktion gibt es TableID ganz gut ... aber wenn ich Verwenden Sie es in einer anderen Funktion, es gibt ein undefined zurück.

Was ?? Ich dachte bekommen und legte einen Schlüssel global gemacht ..

AUCH vor diesem alles, was ich realisiert man „könnte“, wie eine solche Tabelle Lookup-Funktion aufrufen:

ets:lookup(get({tableUniqueID}), msgIn) 

Das Gleiche gilt, in Funktion arbeitet, außerhalb nicht .. Setzen Problem Get ..

Dann erkannte ich eine andere Art und Weise eine Tabelle Lookup durch den Aufruf der Atom der Tabelle würde

ets:lookup(tb, msgIn) 

Aber das funktioniert nie, nicht innerhalb der Funktion, nicht out ..

Also meine Hauptpriorität wäre zu verstehen, warum ein Tisch durch sein Atom nachschlagen, ist nicht möglich. Aber es sagt, es ist am meisten überall, einschließlich der Bedienungsanleitung.

Der get/put ich könnte ohne leben, Solange ich Tabelle speichern kann, dann suchen Sie die Tabelle nach ihrer Atom-Kennung.

Kann jemand dieses Dilemma beleuchten?

Antwort

6

Ich habe es !!

die Dokumentation Wunsch, würde sagen, dass dies unter der Lookup-Funktion .. Noch besser wäre es, alle, die Tutorials auf ets, oder mehr, so Bücher

Die Lösung schreibt, ist zu

TableID = ets:new(tb, [set,public,named_table]) 

Das named_table ist der wichtige Teil

Mann Seiten Einige Graben durch, aber

;)

4

Die richtige Antwort auf Ihr Problem ist, dass Sie keine globale Tabelle verwenden, sondern die Informationen weitergeben. Zumal Sie Effizienz in Ihrer ursprünglichen Frage erwähnen. Sie erstellen einen Staupunkt in Ihrem Code, der auf jedem Mehrkerngerät zu einer schlechteren Leistung führt.

Die ETS-Tabelle wird als ein Prozess implementiert, den alle anderen Prozesse aufrufen müssen, um einen Wert zu erhalten.

Verwandte Themen