>> a = 5
=> 5
>> b = a
=> 5
>> b = 4
=> 4
>> a
=> 5
如何将“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
当您执行 b = a
时,b
指向与 a
相同的对象(它们具有相同的 object_id
).
当你执行 a = some_other_thing
时,a 将指向另一个对象,而 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
数组示例:
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]
关于ruby 变量作为同一对象(指针?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169277/