我一直在学习如何使用 ets,但让我感到困扰的一件事是,偶尔*,ets:match
会抛出一个 bad argument
......而且,从它们开始,所有后续调用(甚至以前有效的调用)也会抛出一个 bad argument
:
> ets:match(Tid, { [$r | '$1'] }, 1)。
% 这场比赛有效...
%然后,在某些时候,出现了:
** 异常错误:参数错误
在函数 ets:match/3
称为 ets:match(24589,{[114|'$1']},1)
% 从那时起,匹配停止工作:
> ets:match(Tid, { [$r | '$1'] }, 1)。
** 异常错误:参数错误
在函数 ets:match/3
称为 ets:match(24589,{[114|'$1']},1)
有什么方法可以“重置”ets
系统,以便我可以再次查询它(即,从 shell )?
*:我无法重现这个问题……但是当我尝试做“其他事情”时它经常发生。
最佳答案
虽然我不是 100% 确定,但 this thread 似乎可以回答您的问题。看来您正在 shell 中观察这种行为。如果是这样,两个事实正在以一种令人困惑的方式相互作用:
因此,当您遇到第一个异常时,当前的 shell 进程将终止,导致 ets 表被删除,然后为您启动一个新的 shell 进程。现在,当您尝试另一个
ets:match
时,它会失败,因为该表不再存在。关于Erlang/ets : reset ets table after getting a "bad argument"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1964990/