3

ets:match に問題があります。次のコードでは、ets:match が 1 つの見つかった値を返すことを期待していますが、何も返されません。なんで ?

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

1 に答える 1

10

代わりにets:match_object/2が必要になるでしょう:

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

ets:match/2を使用する場合、パターンには など'$1'のアトムを含める必要があります'$2'。結果はリストのリストになります。各サブリストには、マジック アトムによって指定された順序で対応する要素が含まれます。たとえば、最後の 3 つの要素を逆の順序で取得するには、次のようにします。

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

マッチでそのようなアトムを使用しなかったため、マッチごとにゼロ要素が返されます。したがって、1 つの空のリストを含むリスト[[]].

于 2013-04-01T20:21:59.400 に答える