gpt4 book ai didi

ruby - 在 Ruby 中,如果我在循环内声明一个 lambda 函数,它会在每次迭代后正确清理吗?

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

我有这样的东西:

for i in 1..100000
template = GetTemplate(i)

set_setting_lam = lambda do |setting|
(...) # Would prefer not to duplicate the code for the loops below
template.setting = setting
end

for setting in settingArray
set_setting_lam.call(setting)
end

for setting in settingList
set_setting_lam.call(setting)
end
end

这会生成 100000 个 set_setting_lam 对象,还是会在每次迭代后清除?

最佳答案

它会创建对象,并且不会在每次迭代后根据这个清理它们:

object_ids = []
1.upto(5) { |i| object_ids << lambda{ i }.object_id }
object_ids.each do |object_id|
puts "#{ ObjectSpace._id2ref(object_id) } - #{ ObjectSpace._id2ref(object_id).call }"
end

#<Proc:0x007fae509c7380@test1.rb:2 (lambda)> - 1
#<Proc:0x007fae509c7330@test1.rb:2 (lambda)> - 2
#<Proc:0x007fae509c72e0@test1.rb:2 (lambda)> - 3
#<Proc:0x007fae509c7290@test1.rb:2 (lambda)> - 4
#<Proc:0x007fae509c7240@test1.rb:2 (lambda)> - 5

UPD

它会在一段时间后开始垃圾收集,对于我来说,1000 个对象 888 在循环结束后仍在内存中。

关于ruby - 在 Ruby 中,如果我在循环内声明一个 lambda 函数,它会在每次迭代后正确清理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27626630/

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