Ruby如何从构造函数中给出的对象继承

时间:2014-02-12 19:23:24

标签: ruby dynamic-typing

我是动态类型编程语言的新手,我有继承问题。 就我而言,我遵循了Ruby类:

class Vertex
  def initialize(given_object, *edges)
    @o = given_object
    @e = edges
  end
end

我需要为对象类扩展Vertex类,

class Vertex < given_object

所以我需要从构造函数

中给出的对象扩展我的对象

我知道这是基础知识,但正如我之前提到的,我是动态类型语言的新手。

@edited: 好的我明白了,所以让我们考虑一下这个例子:

class TestClass
  def initialize(object)
    @object = object
    TestClass < object.class
  end
end

#now In code I want to run each method on TestClass because it should inherit from Array
v = TestClass.new([1,2,3,4,5,6,7,8,9])    
v.each { |number| print number}

但是我得到了翻译错误

 `<top (required)>': undefined method `each' for #<TestClass:0x00000001275960 @object=[1, 2, 3, 4, 5, 6, 7, 8, 9]> (NoMethodError)

3 个答案:

答案 0 :(得分:1)

不幸的是,您无法在运行时更改对象的超类。

请参阅How to dynamically alter inheritance in Ruby了解可能适合您的其他一些想法。

答案 1 :(得分:1)

当所有方法都代理给定模型时,您可能希望使用Decorator模式:

class TestClass
  def initialize(object)
    @object = object
  end

  def method_missing(method, *args, &block)
    @object.send(method, *args, &block)
  end
end

v = TestClass.new([1,2,3,4,5,6,7,8,9])    
v.each { |number| print number}

答案 2 :(得分:0)

def关键字用于方法,而不是类。尝试使用class vertex,看看您的问题是否已解决。