Как мне наследовать от Pathname в Ruby? - PullRequest
1 голос
/ 17 сентября 2011

У меня есть RemoteFile, который наследуется от Pathname

class RemoteFile < Pathname
end

Я создаю удаленный файл и получаю его родительский

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

Есть ли способ получить Pathname для возврата RemoteFiles, кроме обезьяньего исправления дюжины методов в Pathname? Разве это не будет работать лучше, если Pathname вернет объекты типа self.class.new?

Ответы [ 3 ]

2 голосов
/ 30 января 2013

До сих пор это работало для меня:

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

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

Похоже, что + (другое) - единственная функция, которую нужно перегрузить.

1 голос
/ 17 сентября 2011

Вы можете рассмотреть возможность делегирования фактическому Pathname объекту.Взгляните на эту статью .Таким образом, вам не придется ничего подстраивать под патчи, а благодаря делегированию вы можете изменять вещи более безопасным и более контролируемым образом.

0 голосов
/ 17 сентября 2011

На самом деле вы можете просто открыть класс Pathname вместо того, чтобы наследовать его.

...