我有一个类,它有一个“工厂”方法,它返回给定一个file_name的新实例。根据给定的文件类型,它需要以不同的方式构造对象。它也恰好是一个swig生成的类,它包装了一个c++类,我不确定这是否重要,但我包含了这个细节,以防发生这种情况。所以我在某个地方定义了这个类,其中包括这个new_from_file方法
class Wv::WvWaveList
def self.new_from_file file_name
...
Wv::WaveList.new
end
....
end我想添加一个方法copy_wave,所以我的第一个想法是子类并将它添加到那里,这样就可以这样做了。
class MyWaveList < Wv::WvWaveList
def copy_wave
...
end
end问题是new_from_file仍然返回Wv::WaveList而不是MyWaveList,所以不能对new_from_file返回的实例调用copy_wave
一个简单的解决方案就是在这里打开类并添加方法。
class Wv::WvWave
def copy_wave
...
end
end另一种解决方案是让MyWaveList拥有一个Wv::WaveList的实例,并将所有适当的调用委托给该实例。
所以我只是想知道继承解决方案可能是什么?我只是现在看不出来。
发布于 2016-02-18 15:26:45
我认为这应该有效
class Wv::WvWaveList
def self.new_from_file file_name
...
self.new
end
....
end因为self.new_from_file总是调用Wv::WaveList.new,所以它总是用该类实例化对象,甚至是从子类。但是,通过使用self,您可以对任何子类调用new_from_file,并且对象将属于正确的类:
>> a = MyWaveList.new_from_file "some_file"
=> #<MyWaveList:0x007fd473004318 @file_name="some_file">
>> a.class
=> MyWaveListhttps://stackoverflow.com/questions/35469384
复制相似问题