2011年9月25日

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

池澤といいます。

「要素のない配列の挙動」には何も罪はなく、「配列を2重にしたときの挙動」
に罪があるわけでもない。
真犯人は「xの指しているものは何か」という問題、ということでしょうか。

r = [[], []]
r.each do |x|

if x.empty? <= ここでxはrの要素を指している
x = [""] <=ここでxの指しているものは新しいオブジェクト[""]になった
end
end

つまりもとのrは何も変わっていない。

たださんのヒントのように
x = [""]ではなく x << "" とやると、もとのrの要素が[]から[""]に変わる。

花岡さんのヒントのように
x.object_id をみればxの指しているオブジェクトが変化したことが分かる。

r.map! { |x| x.empty? ? [""] : x} などとやると
期待通りr は [[""], [""]] になります。

eachを使ってはまった感じっぽいですね。

という理解であっているでしょうか。
考えていて面白かったです。

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




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