読者です 読者をやめる 読者になる 読者になる

Rubyの配列で循環参照

Ruby

Rubyでは変数はオブジェクトへの束縛で、参照となるだけ。
よって

a = "abc"
b = a
a[0] = 'A'
p b

で、==>'Abc'となる。

参照ということであれば循環的な配列も作れるということで、試してやると作れました。当たり前ですが。

#ruby -Ks

def show_array(a)
  a.each do |x|
    p x.class if $DEBUG
    if x.instance_of?(Array)
      print "\n<再帰>" if $DEBUG
      show_array(x)
    else
      print x, " "
    end
  end
end   

a = [1, 2, 3]
b = a
a[2] = b       # a[2]の参照先は自分自身になるはず
show_array(a)  # スタックオーバーフローまで実行