2010-11-09 67 views
2

我需要改變DateTime對象。我發現的資源表明,這是我需要做的,但我不確定如何處理此代碼。我在哪裏放?謝謝閱讀。如何使用這個mixin來改變DateTime對象?

module DateTimePatch 
    def getlocal 
     "works!" 
    end 
end 

DateTime.send(:include, DateTimePatch) 

編輯: 所以這是我

/lib/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在加載mixin之前工作正常,不知道爲什麼會發生這種情況?

+0

你指的是什麼資源? – Zabba 2010-11-09 07:08:20

+0

另外,請嘗試'send!'方法而不是'send'。任何錯誤? – Zabba 2010-11-09 07:17:58

+0

你正在執行'/ lib/date_time.rb'嗎? – 2010-11-09 15:11:27

回答

3

那麼,你想添加一個方法到DateTime類嗎?嘗試:

class DateTime 
    def get_local 
    "works!" 
    end 
end 
+0

感謝您的回答。我在哪裏放置該文件?在lib中?我在哪裏運行DateTime.send(:include,DateTimePatch)行? – ben 2010-11-09 07:47:01

+0

你不需要運行「發送」。將文件放在lib文件夾中,它應該可以工作。 – Zabba 2010-11-09 08:00:10

+0

如果get_local方法已經存在,這是否工作?即它是否會覆蓋DateTime的定義? – abarax 2010-11-09 13:04:04

2

可能您忘記了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:而且爲了使用Ruby的DateTimerequire 'date'

+0

YEP添加要求'日期'將適用於你的第二個編輯本。 – abarax 2010-11-11 04:44:38

相關問題