gpt4 book ai didi

ruby - 如何在不计算重新分配的情况下计算类的实例?

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:40 24 4
gpt4 key购买 nike

我正在研究类方法。

我正在尝试计算一个类的创建实例数。我可以通过在 initialize 方法中创建一个计数器变量来做到这一点。

当我重新分配最初分配给一个类实例的变量时,问题就出现了。因为 initialize 方法被调用了两次,所以它无法识别变量只是被重新分配给另一个类实例。

class Ticket
attr_accessor :price
attr_reader :event, :venue

@@count = 0
@@tickets = {}

def initialize(event, venue)
@event = event
@venue = venue

@@count += 1
end

def self.count
@@count
end
end

a = Ticket.new("Michael Buble", "Staples")

a = Ticket.new("Frank Sinatra", "Madison Square Garden")

puts "Ticket count of #{Ticket.count}"

当我在 IRB 中运行上述代码时,它给我一个 Ticket count of 2(正如预期的那样)。如何更改我的代码以使其识别覆盖?

注意:我知道这个问题之前已经针对 Objective C 提出过,但是问题的重新分配方面为问题添加了不同的元素。否则请告诉我。

最佳答案

ObjectSpace.each_object(Ticket).count

将为您提供当前内存中对象的计数。在 IRB 中进行测试时,我发现它遇到了您描述的问题,即使您为变量分配了一个新对象,对象也会保留在内存中。从技术上讲,对象仍然存在,即使您将新实例分配给变量“a”也是如此。

请参阅本文:Deleting an object in Ruby答案包含大量关于您尝试执行的操作的信息。

关于ruby - 如何在不计算重新分配的情况下计算类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20821140/

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