Erlang - глобальные переменные .. да я знаю, я знаю - PullRequest
6 голосов
/ 16 августа 2010

Хорошо, я пытался всеми способами понять это.

Мне нужно, чтобы эта таблица была глобальной. Я понял, что гораздо менее эффективно передавать TableID вокруг .. вобласть действия моей программы.

Итак, я попытался создать новую таблицу и затем найти ее:

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

Затем я использовал:

get({tableUniqueID})

И в той же функциион просто возвращает TableID ... но когда я использую его в другой функции, он возвращает неопределенное значение.

Что ??Я думал, что get и put сделали глобальный ключ ..

ТАКЖЕ до всего этого я понял, что вы "можете" вызвать функцию поиска в таблице следующим образом:

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

То же самое, в функции работает, снаружи не .. проблема Get Get ..

Тогда я понял, что другой способ поиска таблицы будет вызывать атом таблицы

ets:lookup(tb, msgIn)

Но это НИКОГДА не работает, невнутри функции, а не вне ..

Так что моим главным приоритетом было бы выяснить, почему поиск таблицы по ее атому невозможен.Но там написано, что оно есть почти везде, включая руководство.

Получить / положить, без которого я мог бы жить. Пока я могу хранить таблицу, затем ищите таблицу по ее идентификатору атома.

Кто-нибудь может пролить свет на эту дилемму?

Ответы [ 2 ]

6 голосов
/ 16 августа 2010

Я ПОЛУЧИЛ ЭТО !!

Хотелось бы, чтобы документы сказали это под функцией поиска ... А еще лучше, каждый, кто пишет учебники на ets или даже больше книг

Решение для

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

То, что named_table является важной частью

Некоторые копаются в справочных страницах, но

;)

5 голосов
/ 17 августа 2010

Правильный ответ на вашу проблему - вообще не использовать глобальную таблицу, а скорее передавать информацию. Тем более, что вы упоминаете эффективность в своем первоначальном вопросе. Вы создаете в своем коде точку перегрузки, которая ухудшит его производительность на любой многоядерной машине.

Таблица ets реализована как процесс, который все остальные процессы должны вызывать для получения значения.

...