【问题标题】:How do I convert a Elixir tuple into a bitstring?如何将 Elixir 元组转换为位串?
【发布时间】:2013-11-03 13:07:05
【问题描述】:

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

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

我正在学习 Elixir 和 Erlang,所以这对我来说都是全新的。

提前致谢!

【问题讨论】:

    标签: types casting tuples elixir


    【解决方案1】:

    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】:

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

    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 数据结构。

    【讨论】:

    • 从 Elixir v0.13.3 开始,它是Enum.join(Tuple.to_list(tuple))
    【解决方案3】:

    这应该可以完成工作:

    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)))
    

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多