From: Hidetoshi NAGAI Date: 2007-08-02T11:51:03+09:00 Subject: [ruby-list:43787] Re: gsub! で定数を書き換えられてしまう 永井@知能.九工大です. From: "Hiroyuki Iwatsuki" Subject: [ruby-list:43778] Re: gsub! で定数を書き換えられてしまう Date: Thu, 2 Aug 2007 08:57:48 +0900 Message-ID: <138c85610708011657l4547f6c1y65b957b8a3f793be@mail.gmail.com> > ただし、この場合にも定数には新たにオブジェクトを > 代入できますので注意してください。 > > FOO = "hello".freeze > FOO.gsub!(/hello/, 'bye') # 例外 TypeError が発生する > FOO = "bye" # 警告は出るが、代入は行われる 代入も許さない形で定数を使いたければ,こんな手もあります. ------------------------------------------------------- $ /usr/local/bin/irb irb(main):001:0> module FixedConsts irb(main):002:1> FOO = 'fooooooo'.freeze irb(main):003:1> end => "fooooooo" irb(main):004:0> FixedConsts::FOO = 'Foooo!' (irb):4: warning: already initialized constant FOO => "Foooo!" irb(main):005:0> FixedConsts::FOO => "Foooo!" irb(main):006:0> FixedConsts.freeze => FixedConsts irb(main):007:0> FixedConsts::FOO = 'BAAAAAA!!' TypeError: can't modify frozen module from (irb):7 from :0 irb(main):008:0> ------------------------------------------------------- ただし,こんなこともできちゃうんで,あまり制約力はないんですが.(^_^; ------------------------------------------------------- $ /usr/local/bin/irb irb(main):001:0> module HOGE irb(main):002:1> def self.who irb(main):003:2> 'HOGE' irb(main):004:2> end irb(main):005:1> end => nil irb(main):006:0> module FUGA irb(main):007:1> def self.who irb(main):008:2> 'FUGA' irb(main):009:2> end irb(main):010:1> end => nil irb(main):011:0> HOGE.who => "HOGE" irb(main):012:0> FUGA.who => "FUGA" irb(main):013:0> HOGE = FUGA (irb):13: warning: already initialized constant HOGE => FUGA irb(main):014:0> HOGE.who => "FUGA" irb(main):015:0> ------------------------------------------------------- -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp