gpt4 book ai didi

ruby-on-rails - 数组在递归函数中的奇怪行为

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

我不明白这一点,据我所知,这两段代码应该做同样的事情。但他们不是。有人可以阐明为什么会发生这种情况吗?

我只是想找出一个文件夹中的所有文件。此计数还应包括所有嵌套文件夹文件。

这是我的测试用例:


A
- 文件 1
- 文件 2
- 文件 3
--乙
- 文件 4
--D
- 文件 5
- C
- 文件 6

当我运行这段代码时,

def get_all_files(myfolder, filearray = Array.new)
filearray += myfolder.myfiles.pluck(:id)
myfolder.children.each { |c| get_all_files(c, filearray) }
return filearray
end

它只返回 3 个文件。 (只有A的文件。)

当我运行这段代码时,

def get_all_files(myfolder, filearray = Array.new)
myfolder.myfiles.pluck(:id).each do |id|
filearray.push(id)
end
myfolder.children.each { |c| get_all_files(c, filearray) }
return filearray
end

它运行适当数量的文件,即 6。我认为 .push+ 都只是普通的 Ruby 数组方法。那为什么会这样呢?

最佳答案

+= 返回数组的新实例。您的递归没有对返回值做任何事情,因此新实例在方法结束时死亡。

当你做 push 或者 << 的时候,你是在对数组的原始实例进行操作。这就是为什么您会看到不同的行为。

关于ruby-on-rails - 数组在递归函数中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672039/

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