我有一个ActiveRecord类,多个类继承。
该课程有一个方法:
def self.doSomeEvaluation(*args)
#do some evaluation
end
我想保存并添加每个子类的每个doSomeEvaluation
调用的参数。
我还希望它独立于该子类的当前实例。此Set应该是ActiveRecord类的每个子类的个体,并且应该保存在该已实现的子类的不同实例之间。
当我尝试在doSomeEvaluation
来电时设置一套,它与此类似:
def self.doSomeEvaluation(*args)
args.each do |arg|
@set.add(arg)
#do some evaluation
end
使用此实现,我无法实现此类行为,因为在给定子类的实例之间,Set的值将丢失。我还试图将set保持为类变量,但我仍然无法实现上述行为:
def self.doSomeEvaluation(*args)
args.each do |arg|
@@set.add(arg)
#do some evaluation
end
还尝试使用ActiveRecord属性,但它作为常量工作,不允许这种行为。
有关如何实现此行为的任何想法? 从逻辑的角度来看这种行为是否可以接受?
答案 0 :(得分:1)
您已接近解决方案
def self.doSomeEvaluation(*args)
@@set ||= {}
@@set[self] ||= Set.new
args.each { |arg| @@set[self] << arg }
#do some evaluation
end
由于@@set
是类变量,因此它将在您想要的所有类实例之间共享。但是你也想区分不同的类。为此,您需要将其作为哈希,将当前类(self
)作为键。