为什么我可以在Ruby中访问数组中的常量?

时间:2016-11-27 14:16:28

标签: ruby

说我有:

class MyClass
  MY_ENUM = [MY_VALUE_1 = 'value1', MY_VALUE_2 = 'value2']
end

这样的事情是可能的:

p MyClass::MY_VALUE_1 #=> "value1"

为什么呢? MY_VALUE1

中的MY_VALUE_2[]范围不是恒定范围

3 个答案:

答案 0 :(得分:3)

您可以访问嵌套常量MY_ENUM,因为它与外部常量MyClass在同一范围内:两个常量都在类[...]的范围内。

您希望class SomeName构造定义新范围,但事实并非如此。在Ruby中,只有三件事定义了一个新范围:

  • 使用module SomeName
  • 定义班级
  • 使用def some_name
  • 定义模块
  • 使用<script> $('.mobile-menu-link').click(function(){ $('body').toggleClass("no-scroll"); }); </script>
  • 定义功能

答案 1 :(得分:2)

数组文字([...])不定义范围。你似乎想要一个哈希:

class MyClass
  MY_ENUM = {:MY_VALUE_1 => "value1", :MY_VALUE_2 => "value2"}
end 

MyClass::MY_ENUM[:MY_VALUE_1] #> value1

答案 2 :(得分:1)

如果您想阻止课堂外的可见性(隐藏),您可以使用'private_constant'

private_constant :MY_VALUE_1