gpt4 book ai didi

ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效)

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

def reverse(ary)
result = []
for result[0,0] in ary
end
result
end

assert_equal ["baz", "bar", "foo"], reverse(["foo", "bar", "baz"])

这行得通,我想了解原因。有什么解释吗?

最佳答案

如果我使用 each 而不是 for/in 重写它,它看起来像这样:

def reverse(ary)
result = []

# for result[0,0] in ary
ary.each do |item|
result[0, 0] = item
end

result
end

for a in b 基本上就是说,获取数组 b 中的每一项并将其分配给表达式 a。所以当它不是一个简单的变量时会发生一些神奇的事情。

array[index, length] = something 语法允许替换多个项目,甚至是 0 个项目。所以 ary[0,0] = item 表示在索引零处插入 item,替换零项。它基本上是一个 unshift 操作。


但实际上,只需将 each 方法与 block 一起使用即可。没有改变状态的主体的 for 循环必须是最迟钝和难以阅读的东西之一,乍一看它不会做你期望的事情。 each 提供的疯狂惊喜要少得多。

关于ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615937/

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