まつもと ゆきひろです

In message "[ruby-list:8424] Re: Can "initialize" be overrided?"
    on 98/06/19, IWAOKA Masahiro <iwaoka / fr.a.u-tokyo.ac.jp> writes:

|岩岡です。早速ありがとうございます。

|> rubyのバージョンが古いとそうなります.できるようになったのは,
|> えーと…1.1b9_07です.
|
|それが、、、ruby 1.1b9_25(98/06/11) [i386-bsdi3.1] なんです。
|
|# う〜ん、何が悪いんだろう、、、

調べてみました.実はArray.newが再定義されているのでnewの引数
には整数(サイズ)しか渡せないのでした.うーむ.

あまり綺麗ではないですが,以下のような手はあります.

class ExtArray < Array	# 仮名:-)
  def ExtArray.new(data)
    ary = super(data.size)
    ary.init(data)
    ary
  end
  def init(data)
    i = 0
    while i < data.size
      self[i] = data[i]
      i = i + 1
    end
  end
end

別の発想としては継承を使わず,delegate.rbを使ってラップして
しまうという方法もあります.

  temp = [1, 3, 2, 5, 4]
  data = SimpleDelegator.new(temp)

これだとインスタンス変数も使えます.更に[ruby-list:8421]のよ
うな方法を使えばかなり良いんではないかと思います.

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