Ruby - 对象类的别名

时间:2013-04-09 00:55:47

标签: ruby class object alias

抱歉我的英语。

我的代码......

class MyClass

  NewFood = Food

  def index
    @items = NewFood.all
  end
end

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

一些帮助?

2 个答案:

答案 0 :(得分:1)

说你想要一个NewFood对象是没有意义的。只有两个类:MyClassFood。常数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)是否与它的孩子共享,所以这个例子可能会变得混乱。