2013-04-01 2 views
3

ets : match에 문제가 있습니다. 다음 코드에서는 ets : match가 1 개의 발견 된 값을 반환하지만 아무것도 반환하지 않을 것으로 예상합니다. 왜 ?ets : 일치가 예상 값을 반환하지 않습니다.

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

답변

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]] 

가 0 요소는 각각의 일치를 반환; 따라서 하나의 빈 목록을 포함하는 목록, [[]].

관련 문제