Как правильно закрыть таблицу dets после некоторых операций в erlang?
У меня есть функция, которая проверяет, существует ли данное имя пользователя в таблице dets или нет:
is_username_web2_exists(Username)->
dets:open_file(?FILE_PATH),
case dets:lookup(?FILE_PATH,Username) of
[_] -> true;
_ -> false
end,
dets:close(?FILE_PATH).
Я вызываю его в другом модуле, и всегда получаю значение false, проблема в последней строке, потому что, когда я его удаляю, функция работает нормально. Правильно ли я закрыл стол?
1 ответ
Решение
Проблема в том, что функции в Erlang возвращают значение последнего выражения, которое в вашем случае dets:close(?FILE_PATH)
который возвращается ok
при успешном закрытии стола. Вам необходимо сохранить значение, возвращаемое case
и вернуть это:
is_username_web2_exists(Username)->
dets:open_file(?FILE_PATH),
Return = case dets:lookup(?FILE_PATH,Username) of
[_] -> true;
_ -> false
end,
dets:close(?FILE_PATH),
Return.