gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:18 24 4
gpt4 key购买 nike

>> 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 保持不变。

对于Fixnumniltruefalse,如果不更改,则无法更改值>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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com