Nat*_*han 8 ruby ruby-on-rails
我有以下代码:
class MyClass
module MyModule
class << self
attr_accessor :first_name
def myfunction
MyModule.first_name = "Nathan"
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我这样调用方法时myfunction,它工作正常:
> me = MyClass::MyModule.myfunction
=> "Nathan"
> me
=> "Nathan"
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除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
Run Code Online (Sandbox Code Playgroud)
我正在尝试理解这种class << self方法.我认为这是一种self.方法,为它内部的所有方法添加前缀,但如果这是真的,为什么不删除它并self.手动为每个方法添加前缀?
在此先感谢您的帮助.
这是因为你attr_accessor :first_name的包裹也是class << self.
要按照你的建议去做,你可以mattr_accessor像这样使用:
require 'active_support'
class MyClass
module MyModule
mattr_accessor :first_name
def self.myfunction
MyModule.first_name = "Nathan"
end
end
end
Run Code Online (Sandbox Code Playgroud)