bhp*_*bhp 1 ruby methods class instances
我正在研究类方法。
我正在尝试计算一个类的创建实例的数量。我可以通过在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}"
Run Code Online (Sandbox Code Playgroud)
当我在 IRB 中运行上述代码时,它给了我一个Ticket count of 2(如预期的那样)。如何更改我的代码以使其识别覆盖?
注意:我知道这个问题之前已经针对 Objective C 提出过,但是问题的重新分配方面为问题添加了不同的元素。否则请告诉我。
ObjectSpace.each_object(Ticket).count
Run Code Online (Sandbox Code Playgroud)
将为您提供当前内存中对象的数量。在 IRB 中进行测试时,我发现它遇到了您描述的问题,即使您为变量分配了一个新对象,对象仍保留在内存中。从技术上讲,即使您将新实例分配给变量“a”,该对象仍然存在。
请参阅这篇文章:Deleting an object in Ruby答案中有大量关于您想要执行的操作的信息。
| 归档时间: |
|
| 查看次数: |
4564 次 |
| 最近记录: |