- class Test
- class << self
- attr_accessor :some
- def set_some
- puts self.inspect
- some = 'some_data'
- end
- def get_some
- puts self.inspect
- some
- end
- end
- end
- Test.set_some => Test
- puts Test.get_some.inspect => Test nil
在上面我可以找到self作为Test本身但不返回some_data作为输出.
- class Test
- class << self
- attr_accessor :some
- def set_some
- puts self.inspect
- self.some = 'some_data'
- end
- def get_some
- puts self.inspect
- self.some
- end
- end
- end
- Test.set_some => Test
- puts Test.get_some.inspect => Test some_data
有什么区别?
编辑
- Test.some = 'new_data'
- puts Test.some.inspect #=> new_data
- Test.set_some
- puts Test.get_some.inspect => new_data
现在它让我更加困惑.
解决方法
some =:foo让ruby认为它应该创建一个名为some的新局部变量.如果要调用某些=(),则必须使用显式接收器 – 如self.some =:foo.我曾经打过赌注…: – /