2014-01-08 2 views
0

Пожалуйста, смотрите следующий код (взятый из обучения Ruby, книги):Изменение переменной в строку

def timer(start) 
    puts "Minutes: " + start.to_s 
    start_time = Time.now 
    puts start_time.strftime("Start time: %I:%M:%S: %p") 
    start.downto(1) { |i| sleep 60 } 
    end_time = Time.now 
    print end_time.strftime("Elapsed time: %I:%M:%S: %p\n") 
end 

timer 10 

Почему бы там быть необходимо изменить переменную start в строку на линии ставит? Не мог ли я, например, просто положить puts "Minutes: #{start}"?

Кроме того, линия start.downto(1): Является ли блок {|i| sleep 60} указанием количества секунд в минуту?

+0

Это требуется только в том случае, если вы хотите видеть время в хорошем формате с «Start time: ...» и т. Д. Перед ним или если вы хотите определенный формат даты/времени. – lurker

+0

Я подозреваю, что вы имеете в виду 'def timer (start)'. Ответ не требуется, поскольку я удалю этот комментарий. –

+0

Вот документация для [Kernel # sleep] (http://ruby-doc.org/core-2.1.0/Kernel.html#method-i-sleep). Заметим, что '{| i | sleep 60} 'можно записать' {sleep 60} ', так как переменная итератора' i' не используется. –

ответ

2

Да, вы можете сказать:

puts "Mintues: #{start}" 

Это один из многих хороших вариантов Руби. :) В этом случае это не имеет большого значения.

Что касается цикла:

start.downto(1) { |i| sleep 60 } 

Да, это подсчет минут до 1 и каждый раз, спит 60 секунд. Поэтому он будет спать за start минут. Если start не слишком большой, вы можете просто использовать sleep 60*start.

Смежные вопросы