[ruby-list:50848] Re: Stringの派生オブジェクトにsubを取った時のインスタンス変数のコピー

From: MASAKI Haruka <yek@...>
Date: 2019-11-21 18:12:01 UTC
List: ruby-list #50848
正木です。

インスタンス変数はそもそもがインスタンスに固有のものですから、
新しいオブジェクトを返すのにインスタンス変数をコピーするというのは本筋ではないように思います。
クラスによっては他のオブジェクトと共有するとまずいインスタンス変数も普通にあるでしょうし、
嬉しくないケースのほうが圧倒的に多いでしょう。

というよりも、インスタンス変数のような固有情報を保って欲しいのであれば、
それはそのオブジェクトでなければいけないということである、ではないでしょうか。

新規オブジェクトを返すときに共通して呼ばれるのはinitializeですが、
Stringが新しいStringオブジェクトを返すときのnewメソッドの引数は文字列なので、
initializeでインスタンス変数をコピーすることはできません。
呼び出し元のオブジェクトを知るチャンスがありませんので。

そもそもStringにはない挙動を求めているということですから、
やるとすればサブクラス側に書くしかありませんね。
であれば、「スーパークラスとは違う振る舞いをしてほしいメソッド」をすべて示すことになります。


On Fri, 22 Nov 2019 02:50:56 +0900
Takefumi URA <ura.takefumi@gmail.com> wrote:

> 浦です。
> 正木さん、お返事ありがとうございます。
> 
> 一応subが新たなインスタンスを作ることは理解していたつもりです。
> subが派生クラスのインスタンスを作ってくれるならインスタンス変数も
> ケアしてほしかったなという思い込みでした。
> 
> なるほどsubをオーバーライドすればよかったですね。
> …ただ非破壊系のメソッドを全部オーバーライドするのはちょっと骨かなあという気がします。
> # ごめんなさいこの辺質問が足りませんでしたね
> 
>  [...]  
>  [...]  
> 

In This Thread