我在Erlang中有一个元素列表,我正在使用列表:foreach遍历列表中的元素.有没有办法在遍历的中间突破这个"foreach循环".例如:假设我想在列表[2,4,5,1,2,5]中遇到'1'时再停止遍历列表.我该怎么做呢?
另一种方法是使用throw和catch:
catch lists:foreach(
fun(1) ->
throw(found_one);
(X) ->
io:format("~p~n", [X])
end,
[2, 4, 5, 1, 2, 5]).
Run Code Online (Sandbox Code Playgroud)
在shell中运行时,输出:
2
4
5
found_one
Run Code Online (Sandbox Code Playgroud)
编辑:通过大众需求,一个更精确的版本,只捕捉你想要捕获的东西:
try lists:foreach(
fun(1) ->
throw(found_one);
(X) ->
io:format("~p~n", [X])
end,
[2, 4, 5, 1, 2, 5])
catch
throw:found_one ->
found_one
end.
Run Code Online (Sandbox Code Playgroud)
traverse(Liste) ->
traverse(Liste, []).
traverse([], Acc) ->
Acc;
traverse([1|_], Acc) ->
Acc;
traverse([H|T], Acc) ->
% do something useful here maybe?
traverse(T, Acc).
Run Code Online (Sandbox Code Playgroud)
当然这是一个非常粗略的例子.