Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 为什么';IO.PUT将繁殖的工作放入枚举中。每个?_Elixir - Fatal编程技术网

Elixir 为什么';IO.PUT将繁殖的工作放入枚举中。每个?

Elixir 为什么';IO.PUT将繁殖的工作放入枚举中。每个?,elixir,Elixir,我希望第一部分输出1-100到屏幕,但它什么也不做。如果我不使用spawn,只在第二行说IO.puts(I),它工作得很好——因此在每次调用中,IO.puts都工作得很好。HELLO部分工作正常,因此IO.put在一个spawn中工作正常。但这两者的结合不会产生任何效果 这是为什么?注意:如果您将代码保存在.exs文件中,并使用elixit.exs在命令行上运行,则可能会重现此问题 接受它将在另一个进程中执行的函数 派生的进程将执行给定的函数,并在函数完成后退出 在您的情况下,运行代码的父进程

我希望第一部分输出1-100到屏幕,但它什么也不做。如果我不使用
spawn
,只在第二行说
IO.puts(I)
,它工作得很好——因此在
每次调用中,IO.puts都工作得很好。HELLO部分工作正常,因此IO.put在一个spawn中工作正常。但这两者的结合不会产生任何效果

这是为什么?

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


接受它将在另一个进程中执行的函数

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

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

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

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

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

您将不会在iex中看到此问题,因为在这种情况下,运行
spawn
ed进程的父进程本身就是
iex
,在您退出之前它一直处于活动状态。

我在iex中试用了您的代码,它对这两个示例都有效。我可以确认@Gjaldon说的话。我使用Ctrl-B选项从升华文本运行
。exs
,它的行为与OP说的一样。另外,如果我使用elixir test.exs,那么OP报告的问题也会发生
Enum.each(1..100, fn(i)-> 
  spawn(fn-> IO.puts(i) end)
end)
spawn(fn-> IO.puts("HELLO") end)

:timer.sleep(1000)