2

Ruby で 2 つの定数を定義して、2 番目の定数が最初の定数に依存するようにしたいと考えています。これが私がやっていることです:

class MyClass

  MY_CONST = [
    :aaa,
    :bbb,
    :ccc
  ]

  MY_CONST2 = self::MY_CONST << :ddd
end

ただし、以下のコードは、何らかの理由で 2 番目の定数の値を出力します。

puts MyClass::MY_CONST
puts '------------------'
puts MyClass::MY_CONST2


##################
aaa
bbb
ccc
ddd
------------------
aaa
bbb
ccc
ddd

なんで?として定義する以外に、それを取り除く方法はありますdefか?

def self.my_const
  [:aaa, :bbb, :ccc]
end

def self.my_const2
  self::my_const << :ddd
end
4

2 に答える 2

4

あなたは常に間違ってアクセスしています。これはクラス定数なので、そのクラスを定義している間、ローカルで参照できます。

class MyClass

  MY_CONST = [
    :aaa,
    :bbb,
    :ccc
  ]

  MY_CONST2 = MY_CONST + [:ddd]
end

さらに、あなたは mutatingしていますがMY_CONST、これはあなたがやりたいことではありません。then assigns<<の値を変更して、両方が同じになるようにします。MY_CONSTMY_CONST2

MyClass::MY_CONST.object_id
# => 70359163729880
MyClass::MY_CONST2.object_id
# => 70359163729880

MY_CONST2正しく定義した後:

[14] (こじ開ける) main: 0> MyClass::MY_CONST
[
    [0] :ああ、
    [1] :bbb,
    [2] :ccc
]
[15] (こじ開ける) メイン: 0> MyClass::MY_CONST2
[
    [0] :ああ、
    [1] :bbb,
    [2] :ccc、
    [3] :ddd
]
于 2013-06-01T05:16:48.993 に答える