在Ruby中,您可以执行以下操作:
10.times { puts 'hello world' }
我在Elixir中提出的最佳方法是:
Enum.each((0..10), fn(x) -> IO.puts 'hello world' end)
如果在程序中运行,则会收到警告hello_world.exs:1: warning: variable x is unused
。
问题:在Elixir中有更好的方法吗?
背景:我正在进行模拟,需要进行3,000,000次试验。我没有迭代列表。简化的方案是进行3,000,000次硬币投掷并记录头数。
答案 0 :(得分:3)
要删除警告,您可以使用 _ 而不只是 x 。
Enum.each((0..10), fn(_) -> IO.puts 'hello world' end)
你可以通过使用列表理解来简化这一点。
for _ <- 0..10,do: IO.puts "hello"
_
- 这将忽略函数或模式匹配中的参数。如果你愿意,你可以在underscore.Ex - _base
其他案例
如果有人在运行跟踪时需要使用索引,只需指定不带_的变量。 (比如要求索引)
例如,如果有人需要获得索引的平方。
for x <- 0..10,do: IO.puts x * x.
答案 1 :(得分:3)
在这种情况下不要生成列表,只需使用递归:
defmodule M do
def func(0), do: nil
def func(n) do
IO.puts "hello world"
func(n-1)
end
end
M.func(10)
或者您可以实现类似Ruby的方式来执行相同的操作:
defmodule RubyHelpers do
def times(0, _), do: nil
def times(n, func) do
func.()
times(n-1, func)
end
end
import RubyHelpers
10 |> times(fn -> IO.puts "hello world" end)