[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)

In This Thread

Prev Next