如何使用if结构来查找ets表是否为空

Daa*_*uha 3 erlang ets

我是Erlang的新手.我有一个学校项目使用ets:table.但在我想从ets:table中获取一些数据之前,我想使用if结构检查表是否为空.

 if 
   ets:first(Cal) =/= '$end_of_table' ->
     Event = ets:first(Cal),
     {TimeAtStart, Ref} = Event,
     NowTime = now(),
     Ms = timer:now_diff(NowTime, TimeAtStart)div 1000
   end,
Run Code Online (Sandbox Code Playgroud)

现在这给了我一个错误:非法的守卫表达.

我不知道我做错了什么,请帮忙.

友好的问候

大安

Pas*_*cal 6

if期待一个守卫序列.所以它失败了.您可以在if之前进行测试,并使用结果,但是使用您的代码,当您获得'$ end_of_table'时,它也将失败,因为您没有true声明.

我建议为你的代码使用case语句:

case ets:first(Cal)  of
     '$end_of_table' ->
           {error,no_entry};
     {TimeAtStart, _Ref} ->
           {ok,timer:now_diff(now(), TimeAtStart)div 1000}
end,
Run Code Online (Sandbox Code Playgroud)