仅迭代公共Ruby常量
从Ruby 2.0开始,使用private_constant
可以创建一个常量私有的,如果常量直接在声明模块外部使用,则会导致错误。
但是, constants
和const_defined?
仍然返回私有常量, const_get
允许访问它们。 有没有办法通过编程来识别私有常量并在运行时将其过滤掉?
(注意:Module.private_constant是做什么的?有没有办法只列出私有常量?它的答案没有具体说明这种情况,而是相反的(如何仅列出私有常量)。
更新:看起来好像在Ruby 1.9和2.0中, constants
只包含公共常量。 作为2.1,无参数constants
仍然只包括公共常量,但设置inherit
到false
与constants(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