Как мне использовать этот миксин, чтобы изменить объект DateTime? - PullRequest
2 голосов
/ 09 ноября 2010

Мне нужно изменить объект DateTime. Ресурс, который я нашел, утверждает, что это то, что мне нужно сделать, но я не совсем уверен, что делать с этим кодом. Куда я это положу? Спасибо за чтение.

module DateTimePatch
    def getlocal
        "works!"
    end
end

DateTime.send(:include, DateTimePatch)

EDIT: Так вот что у меня есть

/ Библиотека / date_time.rb

class DateTime
  def getlocal
    "it works"
  end
end

Консоль

ruby-1.9.2-p0 > Time.now.getlocal
=> 2010-11-09 23:40:36 +1000
ruby-1.9.2-p0 > DateTime.now
 => Tue, 09 Nov 2010 23:40:57 +1000 
ruby-1.9.2-p0 > DateTime.now.getlocal
NoMethodError: undefined method `getlocal' for Tue, 09 Nov 2010 23:41:02 +1000:DateTime

EDIT2:

Хорошо, теперь я делаю:

ruby-1.9.2-p0 > require './lib/date_time.rb'
=> true 
ruby-1.9.2-p0 > DateTime.now.getlocal
NoMethodError: undefined method `now' for DateTime:Class
    from (irb):2
    from /Users/benhartney/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'
ruby-1.9.2-p0 > DateTime.now
NoMethodError: undefined method `now' for DateTime:Class
    from (irb):3
    from /Users/benhartney/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'

Я попытался добавить временный метод now в миксин, чтобы посмотреть, произошла ли ошибка и произошла ли она. DateTime.now хорошо работал до того, как я загрузил миксин, не уверен, почему это происходит?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Итак, вы хотите добавить метод в класс DateTime? Попробуйте:

class DateTime
  def get_local
    "works!"
  end
end
2 голосов
/ 09 ноября 2010

Возможно, вы забыли require ваш файл.

irb(main):002:0> DateTime.now.getlocal
NoMethodError: undefined method `getlocal' for #
        from (irb):2
        from d:/Ruby/bin/irb.bat:20:in `'
irb(main):003:0> require './lib/date_time.rb'
=> true
irb(main):004:0> DateTime.now.getlocal
=> "it works"

UPD: и require 'date' для использования класса DateTime в Ruby.

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