kri*_*sna 6 ruby attr-accessor
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
Run Code Online (Sandbox Code Playgroud)
在上面我可以找到自己作为测试本身但不返回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
Run Code Online (Sandbox Code Playgroud)
有什么区别?
现在在第一个例子中,如果我将get some方法设置为
Test.some = 'new_data'
puts Test.some.inspect #=> new_data
Test.set_some
puts Test.get_some.inspect => new_data
Run Code Online (Sandbox Code Playgroud)
现在它让我更加困惑.
Rea*_*onk 12
some = :foo让ruby认为它应该创建一个名为的新局部变量some.如果你想打电话some=(),你必须使用一个明确的接收器 - 如self.some = :foo.我曾经打过赌注...: - /
| 归档时间: |
|
| 查看次数: |
3406 次 |
| 最近记录: |