作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Elixir 中,我们有 spawn/1
生成一个没有任何参数的匿名函数和 spawn/3
生成带参数的完全限定函数。但是如何生成一个需要参数的匿名函数呢?
示例:我想运行一个匿名函数,该函数在满足特定条件之前接收消息。参数是能够执行递归步骤的函数本身。
loop = fn f ->
receive do
{:end, pid} -> send(pid, "exiting")
{_, pid} ->
send(pid, "unrecognized message, keep waiting...")
f.(f)
end
end
child = spawn() # How do I spawn it passing itself as an argument?
最佳答案
您可以创建一个新的匿名函数来处理对 loop
的第一次调用。 ,然后让 loop
处理剩下的:
spawn(fn -> loop.(loop) end)
iex(1)> loop = fn f ->
...(1)> receive do
...(1)> {:end, pid} -> send(pid, "exiting")
...(1)> {_, pid} ->
...(1)> send(pid, "unrecognized message, keep waiting...")
...(1)> f.(f)
...(1)> end
...(1)> end
#Function<6.52032458/1 in :erl_eval.expr/5>
iex(2)> pid = spawn(fn -> loop.(loop) end)
#PID<0.90.0>
iex(3)> send pid, {:foo, self}
{:foo, #PID<0.80.0>}
iex(4)> flush
"unrecognized message, keep waiting..."
:ok
iex(5)> send pid, {:end, self}
{:end, #PID<0.80.0>}
iex(6)> flush
"exiting"
:ok
iex(7)> Process.alive? pid
false
关于elixir - 如何生成带参数的匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40977019/
我是一名优秀的程序员,十分优秀!