2010-08-16 10 views
6

OK Próbowałem każdy sposób, aby to zrozumieć.Erlang - Global Variables .. tak wiem, wiem

Potrzebuję, aby ten stół był globalny ... Zdałem sobie sprawę, że znacznie mniej wydajne jest przekazywanie TableID wokół .. w zakresie mojego programu.

Więc próbowałem tworząc nową tabelę, a następnie szuka go:

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

Następnie użyłem:

get({tableUniqueID}) 

iw tej samej funkcji zwraca tableid dobrze ... jeszcze kiedy użyj go w innej funkcji, zwraca wartość undefined.

Co? Myślałem dostać i umieścić wykonane kluczowym globalnym ..

TAKŻE przed tym wszystkim zdałem sobie sprawę, ty „może” wywołać funkcję tabeli przeglądowej jako takie:

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

samo, funkcja działa, poza nie .. Get Put problemu ..

Wtedy zrozumiałem inny sposób Lookup stolik byłoby wywołując atom tabeli

ets:lookup(tb, msgIn) 

ale to nigdy nie działa, nie wewnątrz funkcji, nie out ..

Tak więc moim głównym priorytetem byłoby stwierdzenie, dlaczego wyszukiwanie tablicy za pomocą jej atomu nie jest możliwe. Ale mówi, że jest najbardziej wszędzie, łącznie z instrukcją.

Odbierz/mógłbym żyć bez, Dopóki mogę przechowywać tabelę, następnie odszukaj tabelę za pomocą jej identyfikatora atomu.

Czy ktoś może rzucić światło na ten dylemat?

Odpowiedz

6

I GOT IT !!

życzeń Dokumentów, by powiedzieć, że to w ramach funkcji odnośników .. Jeszcze lepiej, każdy kto pisze tutoriale na ETS, lub bardziej książek

Rozwiązaniem jest

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

To jest named_table ważną częścią

Niektóre kopanie przez strony człowieka, ale

;)

4

Prawidłowa odpowiedź na problem polega na tym, aby w ogóle nie używać tabeli globalnej, ale raczej przekazywać informacje. Zwłaszcza, że ​​wspominasz o skuteczności w oryginalnym pytaniu. Tworzysz punkt przeciążenia w kodzie, co spowoduje, że będzie on miał gorszą wydajność na dowolnej maszynie wielordzeniowej.

Tabela ets jest realizowana jako proces, który wszystkie inne procesy muszą wywołać, aby uzyskać wartość.

Powiązane problemy