我有以下代碼:不理解類,模塊和類<<自我方法
class MyClass
module MyModule
class << self
attr_accessor :first_name
def myfunction
MyModule.first_name = "Nathan"
end
end
end
end
當我調用該方法myfunction
像這樣,它工作正常:
> me = MyClass::MyModule.myfunction
=> "Nathan"
> me
=> "Nathan"
但如果我刪除class << self
並將self.
前綴添加到myfunction
,則不起作用。
例如:
class MyClass
module MyModule
attr_accessor :first_name
def self.myfunction
MyModule.first_name = "Nathan"
end
end
end
> me = MyClass::MyModule.myfunction
NoMethodError: undefined method `first_name=' for MyClass::MyModule:Module
我想了解class << self
方法。我認爲這是一種將self.
前綴添加到其內部的所有方法的方法,但如果這是真的,那麼爲什麼它不起作用,如果我將其刪除並手動爲每個方法添加前綴self.
?
在此先感謝您的幫助。
如果你真的想學習Ruby的元編程的細節,我建議[Ruby的元編程書由保羅·佩羅塔(http://pragprog.com/book/ppmetr/metaprogramming-ruby) 。 – sarnold 2012-03-28 00:04:41