[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 14:15 / Filesize : 278 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 27



429 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 08:32:04 ]
初心者スレだったんだっけ

>>426
オブジェクトを「捕まえる」「入れておく」ことはできない
名前で参照するしかない
変数に対する = は、"右辺" の指すオブジェクトに新たなラベルをつける行為で、本当は「代入」ではない
irb> a = [1, 2]
irb> b = a
irb> a << 3
irb> p (a.object_id == b.object_id)
true

で、スレ的にもこれだけでいいと思うんだが、こっからがめんどい
irb> a = [1, 2, 3, 4, 5]
irb> p (a[0..2].object_id == a.object_id)
false

a と a[0..2] は違うオブジェクトなので、
  [1, 2, 3, 4, 5]
  と
  [1, 2, 3] ← a[0..2] が返す、できたてほやほや配列
という2つの配列オブジェクトが(Rubyの「オブジェクト置き場」に)存在しているように感じるが、実は
  [1, 2, 3, 4, 5] <共有済>
  と
  <注: id:3324 の配列を共有、0要素目から2要素目までを返す、ただし、破壊的変更が来たら配列内容をコピーして保持する>
という、1つの「share された」配列と1つの「share した」配列になってる
これらは自分が share 関係にある配列と自分が share 状態であるということを覚えていて、破壊的変更が自分に来たら share 関係にある配列にそれを通知する
通知または破壊的変更がきた場合の動作は
 ・ 自分が共有元(a)である場合は share 状態を解除し普通の配列に戻る(破壊的変更を自分が受けていた場合は受け付ける)
 ・ 自分が共有先(a[0..2])である場合は共有元の要素の参照をきちんと複製して share 状態を解除し普通の配列に切り替える
ということである、というようなてきとーな理解でいいか>>421
array.c を読めばなんか書いてあるのかね






[ 続きを読む ] / [ 携帯版 ]

全部読む 前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef