我一直在学习如何使用 ets,但困扰我的一件事是,偶尔*,ets:match
抛出一个bad argument
…并且,从他们开始,所有后续调用(甚至以前有效的调用)也会抛出bad argument
:
> ets:match(Tid, { [$r | '$1'] }, 1).
% this match works...
% Then, at some point, this comes up:
** exception error: bad argument
in function ets:match/3
called as ets:match(24589,{[114|'$1']},1)
% And from then on, matches stop working:
> ets:match(Tid, { [$r | '$1'] }, 1).
** exception error: bad argument
in function ets:match/3
called as ets:match(24589,{[114|'$1']},1)
有什么办法可以“重置”ets
系统以便我可以再次查询它(即从外壳)?
*:我无法重现这个问题……但是当我尝试做“其他事情”时,这种情况经常发生。
虽然我不是100%确定,这个线程似乎回答了你的问题。您似乎正在 shell 中观察到这种行为。如果是这样,那么两个事实正在以一种令人困惑的方式相互作用:
- 一旦 ets 表所属的进程终止,它就会被删除。
- 当 erlang shell 收到异常时,它就会终止并以静默方式重新启动。
因此,当您收到第一个异常时,当前 shell 进程会终止,导致 ets 表被删除,然后会为您启动一个新的 shell 进程。现在,当你尝试另一个ets:match
,它失败,因为该表不再存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)