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


erlang repair_continuation(Continuation, MatchSpec)用法及代码示例


repair_continuation(Continuation, MatchSpec) -> Continuation
类型:
Continuation = continuation()
MatchSpec = match_spec()

恢复由返回的不透明延续select/3或者select/1如果延续已经通过外部术语格式(在节点之间发送或存储在磁盘上)。

使用此函数的原因是连续术语包含已编译的匹配规范,因此如果转换为外部术语格式可能会失效。鉴于原始匹配规范保持完整,可以恢复延续,这意味着即使它已存储在磁盘或另一个节点上,也可以在后续的 select/1 调用中再次使用。

例子:

以下调用序列可能会失败:

T=ets:new(x,[]),
...
MS = ets:fun2ms(fun({N,_}=A) when (N rem 10) =:= 0 -> A end),
{_,C} = ets:select(T, MS, 10),
MaybeBroken = binary_to_term(term_to_binary(C)),
ets:select(MaybeBroken).

以下序列有效,因为对 repair_continuation/2 的调用重新建立了 MaybeBroken 延续。

T=ets:new(x,[]),
...
MS = ets:fun2ms(fun({N,_}=A) when (N rem 10) =:= 0 -> A end),
{_,C} = ets:select(T,MS,10),
MaybeBroken = binary_to_term(term_to_binary(C)),
ets:select(ets:repair_continuation(MaybeBroken,MS)).
注意

应用程序代码中很少需要此函数。 Mnesia 使用它来提供分布式select/3select/1 序列。普通的应用程序或者使用 Mnesia,或者阻止 Continuation 转换为外部格式。

从外部格式重新创建时已编译的匹配规范的实际行为已发生变化,并且可能在未来版本中发生变化,但此接口保留用于向后兼容。看is_compiled_ms/1.

相关用法


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