如何在erlang中执行某些操作后正确关闭dets表?

如何在erlang中执行某些操作后正确关闭dets表?,erlang,dets,Erlang,Dets,我有一个函数,用于检查给定用户名是否已存在于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). 我在另一个模块中调用它,我总是得到f

我有一个函数,用于检查给定用户名是否已存在于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,这是最后一行的问题,因为当我删除它时,函数工作正常。
我是否正确地关闭了表?

问题在于Erlang中的函数返回最后一个表达式的值,在您的例子中,它是
dets:close(?FILE_PATH)
,在成功关闭表时返回
ok
。您需要存储
案例返回的值
,并返回:

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.

你用那个代码得到了
false
,还是得到了
ok
?你是对的,我得到的是'ok'而不是'false',我怎样才能在表结束时得到'true'或'false'