代码之家  ›  专栏  ›  技术社区  ›  bennybdbc

为什么红宝石的每个循环都不会中断?

  •  4
  • bennybdbc  · 技术社区  · 14 年前

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

    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
    



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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Telemachus MrJames    14 年前

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

    @storage = [Memory_location.new] * 1000
    

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

    #{Memory_location:0x2bc8b74}