-2

对不起我的英语不好。

我的代码...

class MyClass

  NewFood = Food

  def index
    @items = NewFood.all
  end
end

@items.first是一个 Food 对象,但我想得到一个 NewFood 对象

一些帮助?

4

2 回答 2

1

NewFood说你想要一个对象是没有意义的。只有两个类:MyClassFood。常数MyClass::NewFood只是指向Food; 仅仅因为您定义了该常量并不意味着您可以期望Food类的实例开始表现不同并说它们的类是NewFood.

你能缩小并告诉我们大局是什么吗?你想达到什么目的?你想解决什么现实生活中的问题?我们或许可以提供更好的解决方法。

于 2013-04-09T01:02:51.363 回答
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)与它的孩子共享,所以这个例子可能会变得混乱。

于 2013-04-09T01:24:53.033 回答