Проверьте объект DateTime в Ruby - PullRequest
3 голосов
/ 28 июня 2011

Конструктор в следующем коде получает объект DateTime в параметре

class Test
    attr_accessor :dateTime

    # Takes DateTime object as input
    def initialize(dateTime)
        @dateTime = dateTime
    end
end

Как проверить, является ли параметр dateTime, переданный в конструктор, допустимым объектом DateTime или нет?

Один из способов выяснить это с помощью:

if dateTime.class == DateTime

Но есть ли лучший способ сделать это?

Помните, dateTime - это объект DateTime, а не строка

Ответы [ 4 ]

4 голосов
/ 28 июня 2011

Возможно использовать is_a? или kind_of?, чтобы быть гибким с потенциальными подклассами.

http://www.ruby -doc.org / core / classes / Object.html # M001033

4 голосов
/ 28 июня 2011

Вы можете проверить его по dateTime.is_a?(DateTime), он вернет логическое значение

2 голосов
/ 28 июня 2011

Попробуйте использовать метод is_a?, таким образом, если объект является экземпляром целевого класса (DateTime) или подкласса, вы можете принять его:

dateTime.is_a?(DateTime)
1 голос
/ 29 июня 2011

Если все, что вам нужно, это убедиться, что вы получаете экземпляр DateTime (или подкласса), тогда другие ответы "is is_a?" - это то, что вам нужно.

Тем не менее, вы должны подумать о том, чтобы немного больше прощать ваши материалы. Что если кто-то вручит вам строку типа «2011-06-28 23:31:11»? Для большинства людей это DateTime, хотя Ruby думает, что это экземпляр String. Если вы хотите быть дружелюбнее, вы можете попробовать DateTime.parse это:

begin
    dt = dt.is_a?(DateTime) ? dt : DateTime.parse(dt)
rescue ArgumentError
    # Do your failure stuff here
end

Или, если вы в Rails:

begin
    dt = dt.to_datetime
rescue ArgumentError, NoMethodError
    # Do your failure stuff here
end

Эти подходы дают вам большую гибкость, не теряя ничего в процессе. Прощайте свой вклад, но будьте строгими в своем выводе.

Для справки: в Rails 3 следующие методы имеют to_datetime:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...