これは本来ありがたい仕様だと思うのですが、
今回、どーしても一時的に定数を書き換えたいケースがでました。
ワーニングが出るだけで動きに支障はないので、そのままでもよかったのですが
なんとなくワーニングが消せないかなぁと調べてみました。
以下のような感じでできました。
一時的な変更と言うより、一回削除して再作成です。
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"
0 件のコメント:
コメントを投稿