从模块访问私有常量

时间:2014-11-19 20:10:52

标签: ruby

有没有办法从包含的模块中访问私有常量?

这就是我想做的事情:

module B
  def access_private_here
    puts MY_CONST
  end
end

class A
  include B
  private
    MY_CONST = 1
end

我知道如果这个常数是公开的,我可以做self.class::MY_CONST,对于私人利弊是否有任何相同的方法?

2 个答案:

答案 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

此时它是私有的,所以你不能引用它。作为一个注释,这些类型的东西最好使用方法而不是常量共享。