ets:匹配不返回预期值

时间:2013-04-01 19:38:17

标签: erlang ets

我遇到麻烦:匹配。在下面的代码中,我希望ets:match返回1找到的值,但不返回任何值。为什么?

1> T = ets:new(xxx, []).
16400
2> ets:insert(T, {a, b, c, d}).
true
3> ets:match(T, {'_', '_', '_', '_'}).
[[]]

1 个答案:

答案 0 :(得分:10)

您可能需要ets:match_object/2代替:

> ets:match_object(T, {'_', '_', '_', '_'}).
[{a,b,c,d}]

使用ets:match/2时,模式应包含一些原子,如'$1''$2'等。结果将是一个列表列表,其中每个子列表将按照魔法原子给出的顺序包含相应的元素。例如,要以相反的顺序获取最后三个元素:

> ets:match(T, {'_', '$3', '$2', '$1'}).
[[d,c,b]]

由于你没有在匹配中使用任何此类原子,因此每次匹配都会返回零个元素;因此列表包含一个空列表[[]]