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


erlang foldl(Fun, Acc0, Archive)用法及代码示例


foldl(Fun, Acc0, Archive) -> {ok, Acc1} | {error, Reason}
OTP R14B
类型:
Fun = fun((FileInArchive, GetInfo, GetBin, AccIn) -> AccOut)
FileInArchive = file:name()
GetInfo = fun(() -> file:file_info())
GetBin = fun(() -> binary())
Acc0 = Acc1 = AccIn = AccOut = term()
Archive = file:name() | {file:name(), binary()}
Reason = term()

AccIn == Acc0 开始,对 Archive 中的连续文件调用 Fun(FileInArchive, GetInfo, GetBin, AccIn)

FileInArchive 是文件在存档中的名称。

GetInfo 是一个返回有关文件信息的函数。

GetBin 返回文件内容。

GetInfoGetBin 都必须在 Fun 内调用。如果在 Fun 上下文之外调用它们,则它们的行为是未定义的。

Fun 必须返回一个新的累加器,该累加器将传递给下一个调用。 foldl/3 返回最终累加器值。如果存档为空,则返回Acc0。没有必要遍历存档中的所有文件。可以通过抛出异常以受控方式提前结束迭代。

例子:

> Name = "dummy.zip".
"dummy.zip"
> {ok, {Name, Bin}} = zip:create(Name, [{"foo", <<"FOO">>}, {"bar", <<"BAR">>}], [memory]).
{ok,{"dummy.zip",
     <<80,75,3,4,20,0,0,0,0,0,74,152,97,60,171,39,212,26,3,0,
       0,0,3,0,0,...>>}}
> {ok, FileSpec} = zip:foldl(fun(N, I, B, Acc) -> [{N, B(), I()} | Acc] end, [], {Name, Bin}).
{ok,[{"bar",<<"BAR">>,
      {file_info,3,regular,read_write,
                 {{2010,3,1},{19,2,10}},
                 {{2010,3,1},{19,2,10}},
                 {{2010,3,1},{19,2,10}},
                 54,1,0,0,0,0,0}},
     {"foo",<<"FOO">>,
      {file_info,3,regular,read_write,
                 {{2010,3,1},{19,2,10}},
                 {{2010,3,1},{19,2,10}},
                 {{2010,3,1},{19,2,10}},
                 54,1,0,0,0,0,0}}]}
> {ok, {Name, Bin}} = zip:create(Name, lists:reverse(FileSpec), [memory]).
{ok,{"dummy.zip",
     <<80,75,3,4,20,0,0,0,0,0,74,152,97,60,171,39,212,26,3,0,
       0,0,3,0,0,...>>}}
> catch zip:foldl(fun("foo", _, B, _) -> throw(B()); (_,_,_,Acc) -> Acc end, [], {Name, Bin}). 
<<"FOO">>

相关用法


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