gpt4 book ai didi

ruby - 使用带有局部变量的 `times` block 有奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:47 24 4
gpt4 key购买 nike

我试图组合出一种方法来将单词或短语重复 t 次。我找到了一种更好的方法,但仍然不确定为什么这个方法会这样。

# repeats the word s t times for a default of 2
def repeat s, t = 2
say = s
t -= 1
t.times { say << ' ' + s }
say
end

repeat('hi', 1) # => 'hi'
repeat('hi', 2) # => 'hi hi'
repeat('hi', 3) # => 'hi hi hi hi' [4x]
repeat('hi', 4) # => 'hi hi hi hi hi hi hi hi' [8x]
repeat('hi', 5) # => 'hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi' [16x]

times block 内,似乎 s 在每次迭代后都被设置为与 say 相同的东西。为什么会出现这种行为?

最佳答案

在作业中say = s , Ruby 没有分配 s 的值至 say而是 s 的引用(内存位置) .即 ssay指向内存中的相同字符串。然后,在行 say << ' ' + s , Ruby 首先创建一个新字符串,其值是 ' ' + s 的串联值, 然后将其附加到 say 指向的字符串中.因为says指向同一个字符串,s也改变了。

这基本上与您只是替换所有 s 相同与 say .

请参阅@AJcodez 的答案以获取替代方案,以使其执行您想要的操作。

关于ruby - 使用带有局部变量的 `times` block 有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168615/

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