erlang - 如何使用 if 结构找出 ets 表是否为空

标签 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,

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

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

致以友好的问候

大安

最佳答案

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,

关于erlang - 如何使用 if 结构找出 ets 表是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653251/

相关文章:

openssl - Tsung 在测试 https 时遇到 crypto.so 问题

erlang - 使用 binary_to_existing_atom(二进制,编码)

elixir - 如何在 elixir 中调用 :ets. fun2ms?

datatables - Erlang et :select sublist

erlang - 在 ets 和 mnesia 中哪个更有效

erlang - 限制 ETS 存储的增长

http - 关于使用 erlang 检索的网页大小(字节)的问题

java - 如何编写没有 "needing"注释的代码以提高可读性?

sorting - Erlang ETS 带有袋型元素排序

concurrency - Erlang 中的并发