我遇到麻烦:匹配。在下面的代码中,我希望ets:match返回1找到的值,但不返回任何值。为什么?
1> T = ets:new(xxx, []).
16400
2> ets:insert(T, {a, b, c, d}).
true
3> ets:match(T, {'_', '_', '_', '_'}).
[[]]
答案 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]]
由于你没有在匹配中使用任何此类原子,因此每次匹配都会返回零个元素;因此列表包含一个空列表[[]]
。