我有以下代码:
class MyClass module MyModule class << self attr_accessor :first_name def myfunction MyModule.first_name = "Nathan" end end end end
> me = MyClass::MyModule.myfunction => "Nathan" > me => "Nathan"
但是如果我删除了类<<自我并添加一个自我. 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
我正在努力理解班级<<自我方法.我认为这是一种增加自我的方式.它内部的所有方法的前缀,但如果这是真的,如果我删除它并为每个方法前缀为self,为什么它不起作用.手动? 在此先感谢您的帮助.
解决方法
这是因为你的attr_accessor:first_name也包含在类<<自. 要按照你建议的方式做,你可以像这样使用mattr_accessor:
require 'active_support' class MyClass module MyModule mattr_accessor :first_name def self.myfunction MyModule.first_name = "Nathan" end end end