我知道如何在C ++中这样做,但在Ruby中,我不太确定。这基本上就是我正在使用的结构(除了不是整数,我在数组 data 中包含2个元素数组。)
data = [ 1, 2, 3 ]
while true do
wrong = Array.new
data.each do |d|
print "Guess: "
guess = gets
if guess.strip.to_i == d
puts "Correct!"
else
puts "Sorry, the right answer is #{ d }."
wrong << d
end
end
if wrong.length == 0
break
else
data = wrong
end
end
我是否在每个循环中通过 Array.new 创建内存泄漏?是否有更有效的替代方法?
提前致谢!
答案 0 :(得分:1)
不,Ruby有垃圾收集器。垃圾收集器的基本设计是检查对象以查看它们是否已超出范围,如“错误”变量,如果未被其他对象引用,则标记为删除(释放)。
Ruby和其他语言现在拥有更复杂的垃圾收集器,那些以它为生的人可以在我给出的简单解释中挖洞,但这是基本的想法。
答案 1 :(得分:1)
Ruby允许并行分配,因此交换data
和wrong
的值就像
data, wrong = wrong, data
您不是通过调用Array.new
来创建内存泄漏,因为ruby具有自动垃圾回收功能,因此一旦程序不再拥有对它们的引用,它将删除旧数组。