Select 如何在Match规范的MatchHead中用映射替换记录?

Select 如何在Match规范的MatchHead中用映射替换记录?,select,erlang,maps,matching,ets,Select,Erlang,Maps,Matching,Ets,Erlang匹配规范支持以下模式,并在匹配规范的匹配头中记录: #recordName{field1=1, field='$1', _='_'} 这将匹配表中的所有recordName记录,该表具有field1==1,并且还对字段进行隐式绑定,以便稍后在MatchBody中使用 地图有什么相似之处吗 我尝试了(除了谷歌)以下语法: 及 是否有可能做到这一点,并且语法记录在我找不到的地方?或者,用地图代替记录是一种错误的思维方式吗 短暂性脑缺血发作 编辑: 也许它还不被支持。我刚看到一根柱子 %

Erlang匹配规范支持以下模式,并在匹配规范的匹配头中记录:

#recordName{field1=1, field='$1', _='_'}
这将匹配表中的所有
recordName
记录,该表具有
field1==1
,并且还对
字段进行隐式绑定,以便稍后在MatchBody中使用

地图有什么相似之处吗

我尝试了(除了谷歌)以下语法:

是否有可能做到这一点,并且语法记录在我找不到的地方?或者,用地图代替记录是一种错误的思维方式吗

短暂性脑缺血发作

编辑: 也许它还不被支持。我刚看到一根柱子

% ERROR: * 1: only association operators '=>' are allowed in map construction
#{key:=1, key:='$1', _:='_'}
% ERROR: * 1: illegal use of variable '_' in map
#{key=>1, key=>$1', _=>'_'}
1> M = #{k1 => 1, k2 => 2, k3 => 3}.
#{k1 => 1,k2 => 2,k3 => 3}
2> #{k1:=1,k2:=V} = M.
#{k1 => 1,k2 => 2,k3 => 3}
3> V.
2
4> %% but you cannot do
4> ets:fun2ms(fun(#{key1:=V, key2:=R}) when V == 1 -> R end).
Error: ets:fun2ms requires fun with single variable or tuple parameter
{error,transform_error}
5> 
5> %% while it is possible to do
5> ets:fun2ms(fun({V,R}) when V == 1 -> R end).
[{{'$1','$2'},[{'==','$1',1}],['$2']}]
6> %% or
6> rd(foo,{k1,k2}).
foo
7> ets:fun2ms(fun(#foo{k1=V,k2=R}) when V == 1 -> R end).
[{#foo{k1 = '$1',k2 = '$2'},[{'==','$1',1}],['$2']}]
8> %% or even
8> ets:fun2ms(fun(#foo{k1=1,k2=R}) -> R end).            
[{#foo{k1 = 1,k2 = '$1'},[],['$1']}]
9>