は、私が持っていると言う。このようななぜ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
は、[]
の内部で一定の範囲ですか?
は、私が持っていると言う。このようななぜ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
は、[]
の内部で一定の範囲ですか?
それがであるので、あなたはMY_VALUE_1
ネストされた定数にアクセスすることができますMY_ENUM
と同じスコープ:どちらの定数もクラスMyClass
のスコープにあります。
[...]
構文で新しいスコープを定義することが期待されていましたが、そうではありません。 Rubyでは、3つだけの事は新しいスコープを定義します。
def some_name
module SomeName
class SomeName
配列リテラル([...]
)はスコープを定義していません。あなたはハッシュをしたいように見える:
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