在Elixir中模拟for循环的最佳方法?

4 elixir

常见的命令式编程语言提供了多次运行代码块的循环结构?例如for循环:伪代码:

for(i=0;i<256;++i){
  expression one;
  statement one;
  many code goes here
}
Run Code Online (Sandbox Code Playgroud)

for循环中的大块代码将被执行多次.但作为函数式编程语言,Elixir不提供循环.我知道Enum模块提供了很多次迭代代码的功能.例如

Enum.each(0..99, fn(x) -> IO.puts "hello, world!" end)
Run Code Online (Sandbox Code Playgroud)

上面的代码将执行100次.打印100"你好,世界!" 但这只是一个单行的声明.如何在Elixir中执行大量代码?Elixir的正确方法是什么?我是Elixir的新手.你们能给我一个小样本代码来学习吗?非常感谢你们所有人!

gre*_*ser 9

你的问题中有足够好的解决方案.Enum.each是一种将X函数应用多次的真正方法.

也许如果我们将它格式化不同,你可能会看到你能做什么......

Enum.each(0..99, fn(x) ->
  IO.puts "hello, world!"
end)
Run Code Online (Sandbox Code Playgroud)

该函数与任何其他函数一样,只是它是内联定义的.

所以,只需添加更多行代码......

Enum.each(0..99, fn(x) ->
  IO.puts "hello, world!"
  IO.puts x
end)
Run Code Online (Sandbox Code Playgroud)

如果要引用已定义的函数,可以传递函数签名:

defmodule Test do

  def bar(x) do
    IO.puts "hello, world!"
    IO.puts x
  end

  def foo do
    Enum.each(0..99, &bar/1)
  end

end
Run Code Online (Sandbox Code Playgroud)


Koc*_*ber 5

有很多方法可以做到这一点。您可以编写自己的递归函数或遵循此处提到的其他示例。

您还可以定义你的代码“块”作为一个单独的函数(匿名或命名),并在使用Enum.eachEnum.map依赖于究竟需要返回什么。

或实际用于这样的:

for x <- 0..10 do 
  yor_block_of_code
end
Run Code Online (Sandbox Code Playgroud)