Форматирование возможно, nil значение в часы и минуты


Это может быть немного глупо, потому что есть тысяча способов сделать это, но я изо всех сил пытаюсь придумать, что мне нравится. Я чувствую, что это должно поместиться в одну строку, но я не люблю повторно использовать read_attribute (длина) много и мне не нравится, так это не ясно.

# returns a human-readable string in the format Xh Ym
def length
  # length stored in seconds
  len = read_attribute(:length)
  "#{(len/60/60).floor}h #{len.modulo(60*60)/60}m" unless len.nil?
end


665
5
задан 13 апреля 2011 в 09:04 Источник Поделиться
Комментарии
3 ответа

В одной строке

def length
(len = read_attribute(:length)) && "#{(len/60/60).floor}h #{len.modulo(60*60)/60}m"
end

Если лен == шь возвращать ноль, если нет - второй операнд

6
ответ дан 13 апреля 2011 в 06:04 Источник Поделиться

Один-вкладыши хорошие, но иногда лучше просто разделить линиями. Например:

def length
if (len = read_attribute(:length))
"#{(len/60/60).floor}h #{len.modulo(60*60)/60}m"
end
end

Если вам действительно нравится компактный код, что касается значения nil, вы можете работать с идеей , возможно,с ИК:

def length
read_attribute(:length).maybe { |len| "#{(len/60/60).floor}h #{len.modulo(60*60)/60}m" }
end

4
ответ дан 23 апреля 2011 в 10:04 Источник Поделиться

Предполагая, что лен-это целое число, вы не должны использовать пол. Вы можете сделать что-то подобное

"#{len/3600}h #{(len/60) % 60}m" unless len.nil?

2
ответ дан 13 апреля 2011 в 03:04 Источник Поделиться