ets:match не возвращает ожидаемое значение
У меня проблемы с ets:match. В следующем коде я ожидаю, что ets: match вернет 1 найденное значение, но ни одно не возвращается. Зачем?
1> T = ets:new(xxx, []).
16400
2> ets:insert(T, {a, b, c, d}).
true
3> ets:match(T, {'_', '_', '_', '_'}).
[[]]
1 ответ
Решение
Вы, вероятно, хотите вместо этого 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]]
Так как вы не использовали такие атомы в своем совпадении, нулевые элементы возвращаются для каждого совпадения; таким образом, список, содержащий один пустой список, [[]]
,