我是动态类型编程语言的新手,我有继承问题。 就我而言,我遵循了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)
答案 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
,看看您的问题是否已解决。