iva*_*van 3 ruby scope private
给定一个红宝石类
class Thing
class << self
NUM = 3
def speak
NUM.times { puts "Hi!" }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我无法Thing::NUM从课外访问。如果改为
class Thing
NUM = 3
class << self
def speak
NUM.times { puts "Hi!" }
end
end
end
Run Code Online (Sandbox Code Playgroud)
Thing.speak仍然按预期工作,但我现在也可以访问Thing::NUM. 我知道这个class << self习惯用法打开了对象的单例类,但我很困惑为什么这样定义的类方法可以公开访问而常量不是。
您必须引用正确的类:
Thing.singleton_class::NUM #=> 3
Run Code Online (Sandbox Code Playgroud)
单例类中常量和方法的引用方式没有不一致:
Thing.methods.include?(:speak) #=> true
Thing.singleton_class.methods.include?(:speak) #=> false
Thing.singleton_class.instance_methods.include?(:speak) #=> true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |