Подтвердить что ты не робот

Как преобразовать кортеж Elixir в bitstring?

Я новичок в Elixir, и я пытаюсь напечатать что-то в STDOUT с помощью IO.puts. IO.puts требуется чардата. Я посмотрел документы Elixir и не видел способа конвертировать кортежи в бинты. Я знаю, что должен быть способ сделать это, но я не нашел ни одного BIF, который сделает это.

Итак, я хочу преобразовать это: {"foo", "bar", "baz"} в это: "foobarbaz".

Я участвую в процессе обучения Эликсиру и Эрлану, поэтому для меня это совсем не ново.

Спасибо заранее!

4b9b3361

Ответ 1

Обычно мы используем кортежи для хранения фиксированного количества данных, известных заранее. Поэтому, если вы хотите распечатать содержимое кортежа, я бы рекомендовал:

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

Помните, что вы можете распечатать любую структуру данных Elixir с помощью IO.inspect/1.

Ответ 2

Enum.join создает битструю, состоящую из последовательных элементов списка. Сначала конвертируйте кортеж в список. Используя оператор |> (pipe) может улучшить читаемость:

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

Вы также можете указать разделитель:

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

Ответ 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)))