在Elixir中调用匿名函数100次

Bit*_*ise 3 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)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是我想要fb匿名函数100次.在ruby中它看起来像这样:

 100.times do |i|
   fb.(i)
 end
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*hot 12

(1 .. 100) |> Enum.each(fb)
Run Code Online (Sandbox Code Playgroud)

  • 打印 fizzbuzz 结果列表:`(1 .. 100) |> Enum.map(fb) |> Enum.map(&IO.inspect/1)` (2认同)

She*_*yar 5

没有结果的调用函数

如果您只想执行一次函数n而不返回任何结果(例如将其打印到控制台或将其转换为 GenServer),这Enum.each/2是要走的路。

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

(1..100) |> Enum.each(my_fun)
#=> :ok
Run Code Online (Sandbox Code Playgroud)

返回结果

但是如果你需要返回结果,你应该使用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, ...]
Run Code Online (Sandbox Code Playgroud)

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

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