对不起我的英语不好。
我的代码...
class MyClass
NewFood = Food
def index
@items = NewFood.all
end
end
@items.first
是一个 Food 对象,但我想得到一个 NewFood 对象
一些帮助?
NewFood
说你想要一个对象是没有意义的。只有两个类:MyClass
和Food
。常数MyClass::NewFood
只是指向Food
; 仅仅因为您定义了该常量并不意味着您可以期望Food
类的实例开始表现不同并说它们的类是NewFood
.
你能缩小并告诉我们大局是什么吗?你想达到什么目的?你想解决什么现实生活中的问题?我们或许可以提供更好的解决方法。
举个例子:
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
)与它的孩子共享,所以这个例子可能会变得混乱。