在第5章末尾,我被要求使用匿名函数重写这些行:
Enum.map [1, 2, 3, 4], fn x -> x + 2 end
Enum.each([1, 2, 3, 4], fn x -> IO.inspect x end
所以我写了这个:
Enum.map([1, 2, 3, 4], &(&1 + 2)) Enum.each([1, 2, 3, 4], &IO.inspect/1)
但是运行此命令后,我的输出仅来自检查:
λ elixir functions-5.exs 1 2 3 4
所以我在这里添加了一些IO.puts
:
IO.puts Enum.map([1, 2, 3, 4], &(&1 + 2)) IO.puts Enum.each([1, 2, 3, 4], &IO.inspect/1)
至少可以说,输出确实很奇怪:
λ elixir functions-5.exs ╚╝║═ 1 2 3 4 ok
尝试了一些替代语法并在两次调用之间使用了变量之后,我尝试将这些行直接执行到Interactive Elixir中:
iex(2)> Enum.map([1, 2, 3, 4], &(&1 + 2)) [3, 4, 5, 6]
这种方式很好用!为什么?
iex(1)> IO.puts Enum.map([1, 2, 3, 4], &(&1 + 2)) ╚╝║═ :ok
IO.puts
似乎再次破坏了格式,为什么又要破坏?我想念的是什么?为什么不同的执行上下文没有相同的输出?
总结我的总体问题:威士忌探戈狐步舞???
╚╝║═
;我得到该列表的不同输出:iex(1)> IO.puts [3,4,5,6]
^C^D^E^F
:ok
[IO.inspect
,另一方面,尝试打印传递给它的任何内容的源代码表示。