gpt4 book ai didi

elixir - 为什么 IO.puts 不适用于 Enum.each 内的生成?

转载 作者:行者123 更新时间:2023-12-02 02:10:56 27 4
gpt4 key购买 nike

Enum.each(1..100, fn(i)-> 
spawn(fn-> IO.puts(i) end)
end)

spawn(fn-> IO.puts("HELLO") end)

我希望第一部分将 1 - 100 输出到屏幕,但它什么也没做。如果我不使用spawn ,只需说 IO.puts(i)在第二行,它工作正常 - 所以 IO.puts 在 each 内工作正常称呼。 HELLO 部分工作正常,因此 IO.puts 在生成中工作正常。但这种组合不会产生任何结果。

这是为什么?

最佳答案

注意:如果将代码保存在 .exs 中,则可能会重现此问题。文件并使用 elixit <file-name>.exs 在命令行运行

<小时/>

spawn/1 takes a function which it will execute in another process.

生成的进程将执行给定的函数并在函数完成后退出

在您的情况下,运行代码的父进程在生成的进程完成执行之前终止。

如果我们添加 sleep ,那么,我们将看到输出:

Enum.each(1..100, fn(i)-> 
spawn(fn-> IO.puts(i) end)
end)
spawn(fn-> IO.puts("HELLO") end)

:timer.sleep(1000)

您不会在 iex 中看到此问题在这种情况下,正在运行的父进程 spawn ed 进程是 iex它本身并且一直存在,直到您退出它为止。

关于elixir - 为什么 IO.puts 不适用于 Enum.each 内的生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365627/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com