仅迭代公共Ruby常量

从Ruby 2.0开始,使用private_constant可以创建一个常量私有的,如果常量直接在声明模块外部使用,则会导致错误。

但是, constantsconst_defined? 仍然返回私有常量, const_get允许访问它们。 有没有办法通过编程来识别私有常量并在运行时将其过滤掉?

(注意:Module.private_constant是做什么的?有没有办法只列出私有常量?它的答案没有具体说明这种情况,而是相反的(如何仅列出私有常量)。


更新:看起来好像在Ruby 1.9和2.0中, constants只包含公共常量。 作为2.1,无参数constants仍然只包括公共常量,但设置inheritfalseconstants(false) (即,只列出此模块中定义的,而不是在它的祖先模块常量)具有露出私人的副作用常量。


您可以通过下面的方式识别常量:

class A
  C = "value"
  private_constant :C
  C2 = "value2"
end

A.constants #public constants
#=> [:C2]
A.constants(false) #public & private constants
#=> [:C, :C2]
A.constants(false) - A.constants #private constants
#=> [:C]
链接地址: http://www.djcxy.com/p/91565.html

上一篇: Iterate over only public Ruby constants

下一篇: How to determine the default location for openssl.cnf?