如何将Elixir元组转换为位串?

时间:2013-10-24 17:20:52

标签: types casting tuples elixir

我是Elixir的新手,我正在尝试使用IO.puts将某些内容打印到STDOUT。 IO.puts需要chardata。我查看了Elixir文档并没有看到将元组转换为位串的方法。我知道必须有办法做到这一点,但我没有找到任何BIF这样做。

所以我想将此转换为{"foo", "bar", "baz"}"foobarbaz"

我正在学习Elixir和Erlang,所以这对我来说都很新鲜。

提前致谢!

3 个答案:

答案 0 :(得分:20)

通常我们使用元组来保存预先知道的固定数量的数据。所以如果你想打印一个元组的内容,我建议你这样做:

def print_tuple({ foo, bar, baz }) do
  IO.puts foo <> bar <> baz
end

如果要打印的元组具有动态大小,则很可能要使用列表。您可以使用许多函数将列表的元素转换为二进制文件,例如Enum.join/2

IO.puts Enum.join(list)

如果您完全确定要打印元组内容,可以执行以下操作:

IO.puts Enum.join(Tuple.to_list(tuple))

请注意,您可以使用IO.inspect/1打印任何Elixir数据结构。

答案 1 :(得分:7)

Enum.join创建一个由列表的连续元素组成的位串。首先将元组转换为列表。使用the |> (pipe) operator可以提高可读性:

{"foo", "bar", "baz"} |> Tuple.to_list |> Enum.join  # "foobarbaz"

您还可以指定分隔符:

{"foo", "bar", "baz"} |> Tuple.to_list |> Enum.join(", ")  # "foo, bar, baz"

答案 2 :(得分:1)

这应该做的工作:

def concat_binaries(binaries) do
    List.foldr(binaries, <<>>, fn(a, b) -> <<a :: binary, b :: binary>> end)
end

tuple = {"foo", "bar", "baz"}
IO.puts(concat_binaries(tuple_to_list(tuple)))