我是Ruby的新手,我一直在努力学习元编程。我想定义一个类并计算创建的对象数,然后在调用ClassName.Count
时将其打印出来。 (这将给出已创建的对象数)。
这就是我到目前为止所做的:
class Test
@@number = 0
def initialize
@@number += 1
end
def self.Count
puts "number is #{@@number}"
end
end
Test.Count() # => 0
test1 = Test.new
test2 = Test.new
Test.Count() # => 2
test3 = Test.new
Test.Count() # => 3
这适用于打印正确数量的对象。但是,我应该使用类对象扩展来执行此操作,即不使用自身方法(self.foo
)或类属性(@@number
)。这是我被卡住的地方。我不确定我的解决方案和我需要实现的解决方案之间有什么区别。此外,对此主题的任何阅读建议都非常受欢迎。
答案 0 :(得分:1)
你真的不应该使用"类变量" (例如@@foo
);他们并不是大多数人认为的,他们的行为方式令人惊讶/愚蠢。在大多数情况下,当您认为需要一个"类变量"时,您真正需要的只是类本身的实例变量(作为对象,它是一个实例本身,类{{1} })。
我不知道你为什么不能定义单身方法(即#34;自我方法"),但这是另一种使用Class
的方法语法。
class << self
答案 1 :(得分:1)
这是否符合您的要求?
class Test
@count = 0
def initialize
Test.instance_variable_set(:@count, Test.instance_variable_get(:@count)+1)
end
def count
Test.instance_variable_get(:@count)
end
end
Test.instance_variable_get(:@count)
#=> 0
test1 = Test.new
test1.count
#=> 1
test2 = Test.new
test2.count
#=> 2
test1.count
#=> 2
Test.instance_variable_get(:@count)
#=> 2