From: matz@... (Yukihiro Matsumoto) Date: 1999-11-18T16:29:54+09:00 Subject: [ruby-list:18715] Re: 定数 / 配列 /freeze まつもと ゆきひろです In message "[ruby-list:18706] Re: 定数 / 配列 /freeze" on 99/11/18, "Shigeo Kobayashi" writes: |> |配列サイズだけの「freeze」もあったらいいな(単なる思い付きです) |> |と思いました。 |> |> どのくらい使いでがあるでしょうねえ。 |> |FORTRAN、C/C++等の言語では配列の上限チェックというのは |いつもうっとうしいものです。また、例えば社員番号を配列のイン |デックスに対応させるようなケースでは「配列の上限」そのものが |意味をもちます(新入社員が入らない限り上限は変更しない)。 なるほどねえ。でも、これ以上実行時チェックが入るのはあんまり 嬉しくないので、しばらくは様子を見ます。もし必要であれば、以 下のような対応もできますし。 class FixedArray def initialize(size) @size = size @ary = Array::new(size) end def [](n) if n < -@size or @size <= n raise IndexError, "index out of range" end @ary[n] end def []=(n,v) if n < -@size or @size <= n raise IndexError, "index out of range" end @ary[n] = v end end shain = FixedArray(12) # 小さい会社だな。 |> freezeは一方通行です。一度凍らせたら一生凍ってます。 |もし、meltがあれば配列をファイルやデータベースと同様に |lockしたりunlockできるし、スレッド間でfrozen?を使って |排他制御のような使い方も考えられるような気がします。 それはfreezeの使い方として正当ではないように思います。もちろ ん、正当でない使い方をしちゃいけないってのは私のポリシーに反 するんですが、正当でない使い方を支援する機能を組み込むっての も、違うように思います。 で、以前はなにか理由があって解凍できないようにしてたと思うん ですが、もう理由を忘れちゃってるんですよね(健忘症か)。こうい う時には、変更するにしても、まずその理由を思い出してから変更 したいですね。なんだったかなあ。 |> untaintもあるんであっちゃダメってわけでもないでしょうけどね。 |> |untaintって? Objectのメソッドでオブジェクトの「汚染」を取り除きます。 まつもと ゆきひろ /:|)