まつもと ゆきひろです
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]のよ
うな方法を使えばかなり良いんではないかと思います.
まつもと ゆきひろ /:|)