2011年9月25日

[ruby-list:48408] Re: 要素のない配列の挙動?

> r = [1, 2, 3]
> x = r
> y = r[0..-1]
> x = [3, 4, 5]
> r = [5, 6, 7]
> p r #=> [5, 6, 7]
> p x #=> [3, 4, 5]
> p y #=> [1, 2, 3]


> r = [5, 6, 7] のところで新しい配列オブジェクトが作られてしまっています。

いえ,これはそのように意図して r が新しいオブジェクトを参照するようにしたつもりです.
そうなる前に,y に内容をコピーしておけば,あとから y で参照できる,ということを
示したかったものです.

> あとdupやcloneでは、コピーで新しいオブジェクトを作れれますよー。

るりまの Array#dup のところの例を見ると,ポインタのコピーのように見えるのですが.
配列オブジェクトを指すポインタオブジェクトは新しく作られますが(dup と clone で若干差は
あるようですが),配列オブジェクトそのものは元のものが一つあるだけだと思うのですが.

ary = ['string']
p ary #=> ["string"]
copy = ary.dup
p copy #=> ["string"]

ary[0][0...3] = ''
p ary #=> ["ing"]
p copy #=> ["ing"]

--
俊(とし)


投稿者 xml-rpc : 2011年9月25日 14:01
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106564
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。