我的代码......
class MyClass
NewFood = Food
def index
@items = NewFood.all
end
end
@items.first
是一个Food对象,但我想获得一个NewFood对象
一些帮助?
答案 0 :(得分:1)
说你想要一个NewFood
对象是没有意义的。只有两个类:MyClass
和Food
。常数MyClass::NewFood
只指向Food
;只是因为你定义了这个常量并不意味着你可以期望Food
类的实例开始表现不同并说它们的类是NewFood
。
你可以缩小并告诉我们大局是什么吗?你想达到什么目的?你想解决什么现实生活中的问题?我们可以提供更好的解决方法。
答案 1 :(得分:1)
举个例子:
class Foo
@@instances = []
def initialize(value)
@value = value
@@instances << self
end
def self.all
@@instances
end
end
class Bar
NewFoo = Foo.dup
def index
@items = NewFoo.all
end
end
# Now Bar::NewFoo will instantiate it's own objects
Bar::NewFoo.new(5)
Bar::NewFoo.new('fish')
Bar.new.index
=> [#<Bar::NewFoo:0x00000002f33cf0 @value=5>,
#<Bar::NewFoo:0x00000002f65958 @value="fish">]
然而,我没有看到这种元编程黑客的必要性
编辑:废话,我忘了类变量(@@var
)是否与它的孩子共享,所以这个例子可能会变得混乱。