有没有办法从包含的模块中访问私有常量?
这就是我想做的事情:
module B
def access_private_here
puts MY_CONST
end
end
class A
include B
private
MY_CONST = 1
end
我知道如果这个常数是公开的,我可以做self.class::MY_CONST
,对于私人利弊是否有任何相同的方法?
答案 0 :(得分:2)
我建议您这样写,因此如果您重命名include B
,则不必更改B
以外的任何内容:
module B
def access_private_here
puts self.class::MY_CONST
end
end
class A
include B
private
MY_CONST = "cat"
end
A.new.access_private_here #=> "cat"
答案 1 :(得分:1)
如果你想从另一个模块中引用它:
module B
def access_private_here
puts A::MY_CONST
end
end
如果您确实要将其声明为私有常量,这是非常不寻常的,您需要不遗余力地执行此操作:
module A
MY_CONST = 1
private_constant :MY_CONST
end
此时它是私有的,所以你不能引用它。作为一个注释,这些类型的东西最好使用方法而不是常量共享。