2014-11-06

rubyで一時的にワーニングなしで定数を変更する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyで定義済みの定数の値を変更するとワーニングが出力されます。

これは本来ありがたい仕様だと思うのですが、
今回、どーしても一時的に定数を書き換えたいケースがでました。

ワーニングが出るだけで動きに支障はないので、そのままでもよかったのですが
なんとなくワーニングが消せないかなぁと調べてみました。

以下のような感じでできました。
一時的な変更と言うより、一回削除して再作成です。

class A
  MOGE="momomo"
end

p A::MOGE
-> "momomo"

muga = A::MOGE

A.send :remove_const, :MOGE

A::MOGE = "mimimi"

p A::MOGE
-> "mimimi"

A.send :remove_const, :MOGE

A::MOGE = muga

p A::MOGE
-> "momomo"


これでクラスやモジュールに定義されている定数をワーニングなしで一時的に置き換えることができました。

ちなみにグローバルに定義している定数の場合は、以下のような感じです。

HOGE = "hohoho"

p HOGE
-> hohoho"

fuga = HOGE

Object.send :remove_const, :HOGE

HOGE="hihihi"

p HOGE
-> "hihihi"

Object.send :remove_const, :HOGE

HOGE = fuga

p HOGE
-> "hohoho"
コメントを投稿