【发布时间】:2012-04-11 13:34:36
【问题描述】:
我有以下代码:
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 并在myfunction 上添加了self. 前缀,它就不起作用了。
例如:
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元编程的细节,我推荐Metaprogramming Ruby book by Paolo Perrotta。
标签: ruby-on-rails ruby