[ruby-dev:3508] Re: unfreeze is missing
From:
Inaba Hiroto <inaba@...>
Date:
1998-09-12 13:53:29 UTC
List:
ruby-dev #3508
フォローが遅れました。 From: matz@netlab.co.jp (Yukihiro Matsumoto) Subject: [ruby-dev:3507] Re: unfreeze is missing Date: Thu, 10 Sep 1998 10:32:18 +0900 > |これはあえてそうしているのでしょうか? 実装する気になれば、さほど難し > |くないような気がするのですが、なにか問題があるのでしょうか? > > あえてそうしています.実装上の問題は全くないのですが,freeze > とはたとえばHashのキーになった文字列が変更されないようにマー > クするような使い方を想定していますから,一方通行で十分と考え > たからです. はい、Hashのキーにするためにfreezeした場合には、変更可能に戻す事はでき ない方が良いですね。 > unfreezeの実装は簡単ですから,必要性について話し合う用意はあ > ります. とのことですので、少し書きます。 自分はhashのキーとはちょっと違う場面でfreezeを使う事を考えてました。前 のメールを書いたときに思っていたのは、デバッグの役にたつかな?という事 でした。特に複数の人間で開発する時に、「この処理ではこれは変化してはい けない」という事を陽に書いておくと、変な事をした時にすぐわかる、と。 今、これを書いている時にひらめいたのですが、アルゴリズムをきれいに書く ようなこともできるかな?という事を思いつきました。いわゆる番兵をフリー ズしておいて、ループではいちいちチェックせず、例外で抜けてくるところを つかまえる、なんてことです。(思いついただけなんで具体的にそういううま いアルゴリズムの実例を想定しているわけではないです) > unfreezeが必要だと感じることはまずないと思いますが,変更が必 > 要なった時にはString#dupを使ってコピーを修正するのがよろしい > のではないでしょうか.String#cloneだとfreezeされたコピーが出 > 来ますのでご注意. たいていはそれで用が足りるでしょうけど、多くのオブジェクトがストリング を共有していたりすると面倒ですよね。それから、ストリングが長かったりす ると効率に影響しますよね。 確かにHashのキーにする為にfreezeした場合は一方通行の方がいいのですが… 一方通行のものと戻せるものと2つfreezeが欲しくなってしまいました。贅沢 でしたら > 自己責任で行うから,という考え方もあるのですが. でよいのですが。 -- 稲葉 浩人 (inaba@st.rim.or.jp)