gpt4 book ai didi

ruby - 对对象的误解#tap

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

这是我的简单测试代码:

def test_function
0.tap do |v|
v += 10
end
end

p test_function

为什么我在这里得到 0?我在等着得到 10。

更新:

class TestClass
def initialize
@v = 0
end

def inc
@v = @v + 1
end
end

def test_function
0.tap do |v|
v += 10
end
end

def test_function_2
TestClass.new.tap { |obj|
obj.inc
}
end

p test_function
p test_function_2

0

TestClass:0x29244f0 @v=1

最佳答案

原因是原来的对象没有被+=操作符改变。那么如果您在 block 中创建对它的引用,将引用更改为指向另一个对象,该对象大 10,然后返回,会发生什么。 0 的值保持不变。

关于它 - 这就是您想要发生的事情。 += 运算符不会更改它所操作的对象。它返回另一个不同的 对象并将引用分配给它。这就像:

  v = 0
v = v + 10

您不会期望 0 == 10 在此之后为真,对吧?

关于ruby - 对对象的误解#tap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15631166/

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