当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang select_replace(Table, MatchSpec)用法及代码示例


select_replace(Table, MatchSpec) -> NumReplaced
OTP 20.0
类型:
Table = table()
MatchSpec = match_spec()
NumReplaced = integer() >= 0

匹配表中的对象Table用一个匹配规格。对于每个匹配的对象,现有对象将替换为匹配规范结果。

每个单独对象的 match-and-replace 操作保证是原子和孤立.这select_replace与所有其他选择函数一样,表遍历作为一个整体并没有给出这样的保证。

匹配规范必须保证保留任何匹配对象的 key 。如果不是,select_replace 将失败并显示badarg,而不更新任何对象。

目前,由于性能和语义限制,尚不支持 bag 类型的表。

该函数返回替换对象的总数。

示例

对于第二个位置有列表的所有二元组,在列表中第一个添加原子 'marker'

1> T = ets:new(x,[]), ets:insert(T, {key, [1, 2, 3]}).
true
2> MS = ets:fun2ms(fun({K, L}) when is_list(L) -> {K, [marker | L]} end).
[{{'$1','$2'},[{is_list,'$2'}],[{{'$1',[marker|'$2']}}]}]
3> ets:select_replace(T, MS).
1
4> ets:tab2list(T).
[{key,[marker,1,2,3]}]

通用单个对象compare-and-swap操作:

[Old] = ets:lookup(T, Key),
New = update_object(Old),
Success = (1 =:= ets:select_replace(T, [{Old, [], [{const, New}]}])),

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 select_replace(Table, MatchSpec) -> NumReplaced。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。