當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。