我想实现以下内容:
module A
class B
end
# can call A:B within module
end
# cannot call A:B outside of module (like private constant)
我基本上想要私有常量,但是我希望能够在模块内使用命名空间来调用它们。
在我看来,我需要在A内的B常量上采取某种受保护的行为,但是据我所知,Ruby没有受保护的常量。
我很想听听有关如何实现这一点的想法。
可以做到,但我不知道你为什么要这么做。
module A
class B
def greeting
puts "hi within #{self}"
end
end
puts "constants within A = #{constants}"
B.new.greeting
# <more code>
# lastly...
const_set("B", nil)
end
显示:
constants within A = [:B]
hi within #<A::B:0x00005b2a18ffc538>
warning: already initialized constant A::B
warning: previous definition of B was here
然后,
A::B.new.greeting
NoMethodError (undefined method `new' for nil:NilClass)
如果需要,可以在命令行中添加'-W'
或-W0
以禁止显示警告消息。