我经常遇到必须以to_x函数的形式使用多个管道类型转换才能正确访问/转换数据的情况。
E.g。
IO.puts Enum.dedup Enum.intersperse(System.argv |> to_string |> to_charlist, 32)
这似乎过于冗长。这是不恰当的,还是我错过了一些基本的东西?
答案 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()
这会阻止您进行转换,但仍然会得到您期望的结果。