ruby变量作为同一个对象(指针?)

Orb*_*bit 5 ruby variables pointers

>> a = 5
=> 5
>> b = a
=> 5
>> b = 4
=> 4
>> a
=> 5
Run Code Online (Sandbox Code Playgroud)

如何将'b'设置为实际为'a',以便在示例中,变量a也将变为4.谢谢.

Son*_*tos 6

class Ref
  def initialize val
    @val = val
  end

  attr_accessor :val

  def to_s
    @val.to_s
  end
end

a = Ref.new(4)
b = a

puts a   #=> 4
puts b   #=> 4

a.val = 5

puts a   #=> 5
puts b   #=> 5
Run Code Online (Sandbox Code Playgroud)

当你这样做时b = a,b指向同一个对象a(它们具有相同的object_id).

当你这样做时a = some_other_thing,一个意志指向另一个对象,同时b保持不变.

对于Fixnum,nil,truefalse,你不能在不改变改变数值object_id.但是,您可以更改其他对象(字符串,数组,哈希等)而不更改object_id,因为您不使用赋值(=).

字符串示例:

a = 'abcd'
b = a

puts a  #=> abcd
puts b  #=> abcd

a.upcase!          # changing a

puts a  #=> ABCD
puts b  #=> ABCD

a = a.downcase     # assigning a

puts a  #=> abcd
puts b  #=> ABCD
Run Code Online (Sandbox Code Playgroud)

数组示例:

a = [1]
b = a

p a  #=> [1]
p b  #=> [1]

a << 2            # changing a

p a  #=> [1, 2]
p b  #=> [1, 2]

a += [3]          # assigning a

p a  #=> [1, 2, 3]
p b  #=> [1, 2]
Run Code Online (Sandbox Code Playgroud)