lists:foreach函数在回调函数中可以用来删除元素吗?即是否会对正在迭代的列表进行修改而导致问题?
lists:foreach/2
函数用于在列表中的所有元素上运行特定函数。除此之外,它返回 ok
原子。根据文档定义,它不返回列表。
如果您想对每个元素执行某些函数并返回包含来自该函数结果的列表,则可以使用
foreach(Fun, List) -> ok
对于列表List
中的每个元素Elem
,调用Fun(Elem)
。该函数用于其副作用,而且计算顺序与列表中元素的顺序相同。
lists:map/2
。尽管如此,请注意,与 foreach
不同,map
不保证任何计算顺序。lists:delete/2
。
Pid
这个进程发送到List
中的所有元素,可以使用lists: foreach(fun(E)-> Pid!E end,List)
。 - A. Saridforeach
适用于具有副作用的函数的特定属性是保证将函数应用于列表元素后遵循列表顺序。尽管您也可以使用map
并忽略结果,但在理论上,map
不保证任何评估顺序(因为对于纯函数,评估顺序无关紧要) - Samuel Rivas