class MyClass
MY_ENUM = [MY_VALUE_1 = 'value1', MY_VALUE_2 = 'value2']
end
像这样的东西是可能的:
p MyClass::MY_VALUE_1 #=> "value1"
为什么? []
内的MY_VALUE1
和MY_VALUE_2
是否为恒定范围?
class MyClass
MY_ENUM = [MY_VALUE_1 = 'value1', MY_VALUE_2 = 'value2']
end
像这样的东西是可能的:
p MyClass::MY_VALUE_1 #=> "value1"
为什么? []
内的MY_VALUE1
和MY_VALUE_2
是否为恒定范围?
您可以访问嵌套不断MY_VALUE_1
,因为它是在与外部常数MY_ENUM
的范围相同:两个常数都在MyClass
的范围内。
您期望[...]
结构定义一个新的作用域,但它不。在Ruby中,只有三件事情定义一个新的范围:
class SomeName
module SomeName
def some_name
数组文字([...]
)不定义范围。你似乎想一个散列:
class MyClass
MY_ENUM = {:MY_VALUE_1 => "value1", :MY_VALUE_2 => "value2"}
end
MyClass::MY_ENUM[:MY_VALUE_1] #> value1
如果你想防止类(隐藏)之外可见,你可以使用“private_constant”
private_constant :MY_VALUE_1