Elixir中的惯用语类型转换

时间:2017-01-13 16:35:23

标签: elixir

我经常遇到必须以to_x函数的形式使用多个管道类型转换才能正确访问/转换数据的情况。

E.g。

IO.puts Enum.dedup Enum.intersperse(System.argv |> to_string |> to_charlist, 32)

这似乎过于冗长。这是不恰当的,还是我错过了一些基本的东西?

2 个答案:

答案 0 :(得分:1)

我知道这是一个人为的例子,但是如果你需要多次类型转换,你可能会做错了。选项是选择适当的类型并在整个应用程序中使用它们。

您是否仍想进行多次管道转换,请为它们声明宏:

defmacro to_chars(arg) do
  quote bind_quoted: [arg: arg] do
    arg |> to_string |> to_charlist
  end
end

并使用它们:

IO.puts System.argv
        |> to_chars
        |> Enum.intersperse(32)
        |> Enum.dedup

答案 1 :(得分:0)

我意识到这只是一个例子,但你应该使用正确的功能。在此特定示例中,您可以执行以下操作。

System.argv()
|> Enum.join(" ")
|> IO.puts()

这会阻止您进行转换,但仍然会得到您期望的结果。