Массивы Ruby имеют метод #join
, который создает строку, объединяя элементы массива и добавляя необязательный разделитель.
Другие перечисления, такие как диапазоны, не имеют такого же метода.
Вы можете эмулировать поведение, используя #inject
, например.
('a'..'z').inject('') do |acc, s|
if acc.empty?
s
else
acc << ' some separator ' << s.to_s
end
end
Есть ли лучший способ присоединиться к перечислимым? Был ли #join
опущен по определенной причине?
ИЗМЕНИТЬ:
Одна вещь, о которой я бы беспокоился, - это копирование массивного перечисляемого в массив. Конечно, это редко используется, но все же. Например:
(1 .. 1_000_000_000_000_000).to_a.join
Поэтому меня особенно интересуют решения, которые не требуют создания массива со всеми значениями в качестве промежуточного шага.
inject
сделать так, как сделали. - person Aleksei Matiushkin   schedule 14.09.2018inject
не работает. Но да, это правильный подход. - person Sergio Tulentsev   schedule 14.09.2018#join
когда-либо? - person sawa   schedule 14.09.2018#count
. Он предлагает специализированный вывод для бесконечных случаев. - person Erik Madsen   schedule 14.09.2018