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
返回文件内容。
GetInfo
和 GetBin
都必须在 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 foldl(Fun, Acc0, List)用法及代码示例
- erlang fold(Fun, Acc0, Q :: queue(Item))用法及代码示例
- erlang fold(Fun, Acc0, Orddict)用法及代码示例
- erlang fold(Fun, Init, MapOrIter)用法及代码示例
- erlang foldr(Fun, Acc0, List)用法及代码示例
- erlang fold(Function, Acc0, QH)用法及代码示例
- erlang format(Format)用法及代码示例
- erlang format_exception(Class, Reason, StackTrace)用法及代码示例
- erlang float用法及代码示例
- erlang file_read用法及代码示例
- erlang file_size用法及代码示例
- erlang from_list用法及代码示例
- erlang find用法及代码示例
- erlang fun2ms(LiteralFun)用法及代码示例
- erlang float(Number)用法及代码示例
- erlang float_to_binary(Float, Options)用法及代码示例
- erlang float_to_list(Float, Options)用法及代码示例
- erlang floor(Number)用法及代码示例
- erlang fun_to_list(Fun)用法及代码示例
- erlang filter(Fun, Q1 :: queue(Item))用法及代码示例
- erlang filtermap(Fun, Q1)用法及代码示例
- erlang fetch(Key, Orddict)用法及代码示例
- erlang fetch_keys(Orddict)用法及代码示例
- erlang filter(Pred, Orddict1)用法及代码示例
- erlang find(Key, Orddict)用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 foldl(Fun, Acc0, Archive) -> {ok, Acc1} | {error, Reason}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。