下面的代码循环遍历一个数组factor_list
并检查它们中的每一个是否包含一个指定的变量。如果是这样,将它们从数组中删除,将它们相乘,然后将最终结果与变量相加。在所有操作之后,将因子添加回数组。
temp_factor = nil
factor_list.each{|factor|
if factor._variables.include?(variable)
if temp_factor == nil
temp_factor = factor
else
temp_factor = multiply(temp_factor, factor)
end
factor_list.delete(factor)
end
}
temp_factor = sumOut(temp_factor, variable)
factor_list << temp_factor
问题是,temp_factor
总是nil
在每次迭代中,即使它已在前一个循环中设置。我认为主要问题是因为数组中的删除,所以我删除了删除进行测试,并且解决了问题(但我的数组当然充满了垃圾)。所以我得出的结论是 mytemp_factor
是对象的浅拷贝,因此它的引用对象与原始对象一起消失了。然后我尝试使用 marshal 技巧进行深度复制,但没有帮助。
这就是我所拥有的,因为我无法解决问题。谁能帮我找出所有这些神话背后的机制?
你们就重写代码以避免问题提供了非常好的建议,这很酷,他们真的很有帮助!但我仍然想知道是什么导致了上述问题?如果我能学到那一点信息就太好了!