На основе вашего кода obj.expireAt
представляется простым целым числом. Обычной лучшей практикой в Ruby было бы сделать этот атрибут объекта экземпляром Time
или DateTime
. (См. this question для обсуждения различий между этими двумя параметрами.) Если ваши данные поступают как целые числа, сделайте преобразование один раз, когда вы храните значение в переменной экземпляра, а не повторно, когда обращаетесь к нему для других целей. Вы всегда можете кэшировать целое число и сделать его доступным также с помощью другого метода, если вам нужно вернуть его, не выполняя преобразование назад.
Это считается лучшей практикой, потому что он делает атрибут самодокументированным и автономным. Вы можете проверить объект и определить, что его класс (хотя это делает программным способом считается плохой формой в Ruby, где мы обычно предпочитаем Duck Typing). Если я посмотрю на значение, которое я вернусь от expireAt
и вижу, что это Fixnum
, это не говорит мне ничего полезного. Я должен сделать вывод, что это временная метка, и делать дополнительную работу, чтобы преобразовать ее в значение с полезной временной семантикой. Если это Time
, я не только знаю, что это такое, но у меня есть все методы этого класса, доступные для его манипулирования.
Поскольку все в Ruby является объектом (и, следовательно, экземпляром какого-либо класса), вы также можете использовать класс, предназначенный для использования так, как используется ваше значение.
Каков класс 'obj.expireAt'? Основываясь на вашем коде, он кажется простым целым числом. Лучшей практикой в Ruby было бы сделать этот атрибут объекта экземпляром 'Time' или' DateTime' в первую очередь и сделать преобразование только один раз, где бы это значение не было установлено. Тогда в точке вашего кода вы просто делаете 'Time.now
'obj.expireAt' - простое целое число (временная метка). Можете ли вы объяснить мне, почему его лучше сравнивать с Time или DateTime.Просто любопытно узнать. –
Потому что это самодокументировано и самодостаточно. Вы можете проверить объект и определить его класс; если его 'Fixnum', это не говорит вам ничего полезного. Вы должны как-то знать, что это временная метка и как преобразовать ее в фактическое значение времени. Если это «Время», вы не только знаете, что это такое, но все методы этого класса доступны для управления им. Все в Ruby - это экземпляр некоторого класса; вы также можете использовать ту, которая соответствует вашей ценности. –