4

我的个人项目之一中有以下代码:

def allocate(var, value) # Allocate the variable to the next available spot. 
  @storage.each do |mem_loc|
    if mem_loc.free?
      mem_loc.set(var, value) # Set it then break out of the loop.
      break
    end
  end
end

存储数组中的每一项都是一个响应free的对象?并设置。我想要做的是循环遍历数组,寻找下一个空闲(空)对象来设置变量。我的问题是,这只是循环遍历每个对象并将它们全部设置。我是否错误地使用了中断功能?

测试它,我称之为:

store.allocate(:a, 10)
store.allocate(:b, 20)

所以 store[1] 应该设置为 :b 和 20。但是当我输出内容时,它的值为 10,数组的其余部分也是如此。

4

1 回答 1

2

我相信我已经找到了错误,它实际上不在上面的代码中。当我设置存储阵列时,我这样做了:

@storage = [Memory_location.new] * 1000

相信它会创建 1000 个不同的对象。我认为实际发生的是,它创建了对同一个对象的 1000 个引用,所以当我更改其中一个时,我更改了所有引用。我可以通过在两个不同的数组位置上使用 puts 方法来证明这一点,它们都返回:

#{Memory_location:0x2bc8b74}
于 2010-08-12T10:31:58.780 回答