你如何在Elixir进行多项试验?

时间:2016-01-17 02:07:31

标签: elixir

在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次硬币投掷并记录头数。

2 个答案:

答案 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)