まつもと ゆきひろです

In message "[ruby-list:18706] Re: 定数 / 配列 /freeze"
    on 99/11/18, "Shigeo Kobayashi" <shigeo / tinyforest.gr.jp> 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のメソッドでオブジェクトの「汚染」を取り除きます。

                                まつもと ゆきひろ /:|)