【问题标题】:Erlang lists:foreach side effectsErlang 列表:foreach 副作用
【发布时间】:2016-10-01 03:53:36
【问题描述】:

lists:foreach函数可以用来删除回调函数中的元素吗?即如果修改发生迭代的列表会不会有任何问题。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    我想这个简单的答案是否定的。

    lists:foreach/2 函数用于对列表中的所有元素运行特定函数。除此之外,它还返回ok 原子。它不会返回文档定义的列表。

    foreach(Fun, List) -> ok
    List 中的每个元素Elem 调用Fun(Elem)。此函数用于其副作用,并且计算顺序被定义为与列表中元素的顺序相同。

    如果你想对每个元素执行一些函数并返回一个包含这个函数结果的列表,你可以使用lists:map/2。不过请注意,与foreach 相比,map 不保证任何评估顺序。

    如果您只想从列表中删除一个元素,只需使用lists:delete/2

    【讨论】:

    • 谢谢。我忘记了变量在erlang中是不可变的。 副作用在文档中仍然是什么意思。文档所指的副作用是谁?
    • 我猜副作用意味着它不返回任何东西,它只是用来为列表中的每个元素运行一些东西而不关心它的返回值。例如,如果你想发送一些进程PidList 的所有元素你可以做lists:foreach(fun(E)->Pid ! E end, List)
    • 请注意,使foreach 适用于具有副作用的函数的特定属性是保证将函数应用于列表顺序之后的列表元素。即使您也可以使用 map 并忽略结果,但理论上 map 不保证任何评估顺序(因为评估顺序与纯函数无关)
    • 感谢@SamuelRivas,这绝对正确,我已将此注释添加到我的答案中。
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2014-04-09
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2011-09-17
    • 2017-08-14
    • 2018-06-21
    相关资源
    最近更新 更多