Как поместить элементы в массив ruby ​​с помощью цикла - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь создать массив дат, используя цикл. Но цикл выдвигает только одну дату, и когда я запрашиваю массив, я вижу, что это не массив, а список. Помощь.

date1 = '01-01-2019'.to_date
dates = []
count = 0
repeat = 3

while (count < repeat)
 count += 1
 date2 = date1 + count.month
 dates << date2
 puts dates
end

Ожидаемые результаты должны быть [01-02-2019, 01-03-2019, 01-04-2019] .

Однако, если я использую консоль rails, все, что я получаю, это даты в списке. Если я поднимаю date.inspect в контроллере, я получаю только 01-02-2019 .

Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Заменить puts dates на puts "#{dates}". Он будет печатать массив, как ожидается, как [01-02-2019, 01-03-2019, 01-04-2019].

0 голосов
/ 06 января 2019

Из вашего стиля кодирования кажется, что вы довольно новичок в Ruby. Более Ruby-подобный подход был бы:

start_date = '01-01-2019'.to_date
repeat     = 3

dates = 1.upto(repeat).map { |count| start_date + count.months }
# or
dates = (1..repeat).map { |count| start_date + count.months }

Затем для печати массива дат используйте:

puts dates

Насколько я могу судить, ваш код должен работать. Помните, что puts печатает массивы в несколько строк. Если вы хотите отобразить содержимое массива в одной строке, используйте p. Разница в том, что puts использует метод to_s, а p использует метод inspect. Массивы, переданные в puts, будут сглажены и вместо этого будут рассматриваться как несколько аргументов. Каждый аргумент получит свою собственную строку.

puts [1, 2]
# 1
# 2
#=> nil

p [1, 2]
# [1, 2]
#=> [1, 2]
...