在Elixir中调用匿名函数100次

时间:2017-06-21 02:32:56

标签: elixir phoenix-framework

我正在尝试使用Elixir解决经典的fizzbuzz问题。我找到了几种不同的方法来解决这个问题,但最好的方法是:

fizzbuzz = fn
  (0, 0, _) -> "FizzBuzz"
  (0, _, _) -> "Fizz"
  (_, 0, _) -> "Buzz"
  (_, _, a) -> a
end

fb = fn n -> fizzbuzz.(rem(n, 3), rem(n, 5), n) end

fb.(10)

我现在的问题是我想要调用fb匿名函数100次。在红宝石中,它看起来像这样:

 100.times do |i|
   fb.(i)
 end

显然,这不起作用,因为你不能在Ruby中调用这样的匿名函数。但我希望你能得到这张照片。我怎样才能在Elixir中实现这一目标?

2 个答案:

答案 0 :(得分:10)

(1 .. 100) |> Enum.each(fb)

答案 1 :(得分:3)

无结果的呼叫功能

如果您只想执行函数n次而不返回任何结果(例如将其打印到控制台或将其转换为GenServer),则可以使用Enum.each/2。< / p>

my_fun = fn x -> x * x end
#=> #Function<6.52032458/1 in :erl_eval.expr/5>

(1..100) |> Enum.each(my_fun)
#=> :ok

获取结果

但如果您需要返回结果,则应使用Enum.map/2

(1..100) |> Enum.map(my_fun)
#=> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, ...]

您也可以将它们组合在一起:

(1..100) |> Enum.map(my_fun) |> Enum.each(&IO.puts/1)
#=> 1
#=> 4
#=> 9
#=> 16
#=> 25 ...