Как правильно закрыть таблицу 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.
Другие вопросы по тегам