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.谢谢.
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,true和false,你不能在不改变改变数值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)