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