gpt4 book ai didi

ruby - 怎么切片切片!影响 Ruby 中的 object_id?

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:08 25 4
gpt4 key购买 nike

我正在研究 Ruby 中的 object_id 方法行为,以便了解何时创建新对象。我可以理解 (1) 与 (2) 相同,(3) 与 (4) 相同。但我不明白为什么 (5) 与 (6) 不同。

(1) 到 (6) 在下面用我的源代码进行了描述。

所以我想了解什么时候 object_id 会在 Ruby 中更改(新分配)。有没有人简明扼要地解释一下?

非常感谢您。

源代码

a = "foo"
b = a
b.slice!(0)

p a.object_id # (1)
p b.object_id # (2)

b = b

p a.object_id # (3)
p b.object_id # (4)

b = b.slice(0)

p a.object_id # (5)
p b.object_id # (6)

结果

70302398954840                                                                                                                                                                                      
70302398954840
70302398954840
70302398954840
70302398954840
70302398954680

最佳答案

变量不是对象,改变对象不会改变对象的内容。也就是说,改变一个对象永远不会改变对那个对象求值的变量。

这两种方法的区别在于 slice! 改变了原始字符串/对象(恶心!)而 slice 返回一个新的字符串/对象没有 改变原来的(耶!)。

在下文中,X 表示特定(但任意)的字符串,Y 表示不同特定(但任意)的字符串。不要将 XY 与变量混淆;它们只是代表不同的对象来解释行为。

a = X                # a = X
b = a # b = a -> b = X, so b = X
b.slice!(0) # MUTATE object X

p a.object_id # (1) # a = X
p b.object_id # (2) # b = X

b = b # b = b -> b = X, so b = X (no effect)

p a.object_id # (3) # a = X
p b.object_id # (4) # b = X

b = b.slice(0) # b = f(b), where NEW object (Y) is returned, so b = Y

p a.object_id # (5) # a = X
p b.object_id # (6) # b = Y

关于ruby - 怎么切片切片!影响 Ruby 中的 object_id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792630/

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