荻野です。

At Sat, 5 Feb 2000 16:34:25 +0900,
matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです

スピードに度肝を抜かれています。

> Array.newはデフォルトではinitializeを呼びません。

これで振る舞いの理由がわかりましたが、呼ばない理由もきっとあるんですよ
ね? しかしちょっとしたフラグをつけたいときとかあると思うのですが。

> サブクラスで new メソッドを再定義し、
> 
>   class SubArray
>      def SubArray::new(*args)
>         ary = super
>         ary.__send__(:initialize, *args)
>         ary
>      end
>   end
> 
> のようにしてください(引数は適宜調整してください)。

これは私のレベルを超えています... 

3行目は super はスーパークラスのクラスメソッド new の結果、つまり新し
いインスタンスを返しているのですね。次の __send__ がよくわかりません。
ary.initialize(args) ではだめなのでしょうか。(args が Array になってし
まうから?)


>   * 継承は静的だが委譲は動的である
>   * 継承の方が効率が良い
>   * 継承はis-a関係でないときに使いにくい

こちらはなんとなくわかったような、わからないような。Tempfile is a file 
のような気がしますが、Ruby本では Delegator ですよね...


-- 
荻野 充 (おぎの みつる) ... 「萩(はぎ)」にあらず
名古屋大学消費生活協同組合