Как преобразовать кортеж Elixir в bitstring?
Я новичок в Elixir, и я пытаюсь напечатать что-то в STDOUT с помощью IO.puts
. IO.puts
требуется чардата. Я посмотрел документы Elixir и не видел способа конвертировать кортежи в бинты. Я знаю, что должен быть способ сделать это, но я не нашел ни одного BIF, который сделает это.
Итак, я хочу преобразовать это: {"foo", "bar", "baz"}
в это: "foobarbaz"
.
Я участвую в процессе обучения Эликсиру и Эрлану, поэтому для меня это совсем не ново.
Спасибо заранее!
Ответы
Ответ 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)))