我如何继承Ruby中的Pathname?

时间:2011-09-16 22:32:11

标签: ruby inheritance pathname

我有一个RemoteFile继承自路径名

class RemoteFile < Pathname
end

我创建了一个远程文件,并获取其父文件

    irb> RemoteFile.new('.')
     => #<RemoteFile:.> 
    irb> RemoteFile.new('.').parent
     => #<Pathname:..>

除了在路径名中修补十几个方法之外,有没有办法让Pathname返回RemoteFiles?如果Pathname返回类型为self.class.new的对象?

,它会不会更好

3 个答案:

答案 0 :(得分:2)

到目前为止,这对我有用:

class Winpath < Pathname
   def to_s
      super.tr("/", "\\")
   end

   def +(other)
      self.class.new super(other)
   end
end

似乎+(其他)是你需要重载的唯一功能。

答案 1 :(得分:1)

您可以考虑委托给实际的Pathname对象。看看this article。这样你就不必修补任何东西,并且由于委托,你可以用更安全,更可控的方式修改东西。

答案 2 :(得分:0)

实际上你可以重新打开Pathname类而不是继承它。