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

Str*_*s3D 10 types casting tuples elixir

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

所以我想把它转换成{"foo", "bar", "baz"}:"foobarbaz".

我正在学习Elixir和Erlang,所以这对我来说都是新手.

提前致谢!

Jos*_*lim 21

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

def print_tuple({ foo, bar, baz }) do
  IO.puts foo <> bar <> baz
end
Run Code Online (Sandbox Code Playgroud)

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

IO.puts Enum.join(list)
Run Code Online (Sandbox Code Playgroud)

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

IO.puts Enum.join(Tuple.to_list(tuple))
Run Code Online (Sandbox Code Playgroud)

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

  • 从 Elixir v0.13.3 开始,它是 `Enum.join(Tuple.to_list(tuple))`。 (2认同)

小智 8

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

{"foo", "bar", "baz"} |> Tuple.to_list |> Enum.join  # "foobarbaz"
Run Code Online (Sandbox Code Playgroud)

您还可以指定分隔符:

{"foo", "bar", "baz"} |> Tuple.to_list |> Enum.join(", ")  # "foo, bar, baz"
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下你的答案 (8认同)