From: Robert Klemme Date: 2009-05-12T23:34:44+09:00 Subject: Re: Question on redefining the File.join mechanism 2009/5/12 RichardOnRails : > I'm running Ruby over WindowsXP-Pro/SP2.  So I wanted File.join to use > backslash. > > I tried: > > class WFile < File >  def join(arg1, arg2) >    super.join(arg1, arg2).gsub(/\//, '\\') That line should look like one of these variants: super.gsub(/\//, '\\') super(arg1, arg2).gsub(/\//, '\\') However, since join is a class method you would want to define it as class method in WFile. irb(main):001:0> class WFile < File irb(main):002:1> def self.join(*a) super.gsub(%r{/}, '\\\\') end irb(main):003:1> end => nil irb(main):004:0> WFile.join "foo", "bar", "baz" => "foo\\bar\\baz" irb(main):005:0> >  end > end > > but WFile.join(s1,s2) didn't work.  My question is why? > > BTW,  I don't want to start or enter into a debate about the wisdom > nor aesthetics of this approach. > > Also,  I got the File.wjoin to work (using the code below), so I'm > happy.  I just want to learn why my first idea is flawed. > > class File # Join with a backslash rather than a forward slash >  def File.wjoin(arg1, arg2) >    join(arg1, arg2).gsub(/\//, '\\') >  end > end Another however: since you are defining a single method only the question is whether it warrants a comlete class. Why not just define wjoin in class File or simply override File's definition, e.g. def File.join(*a) a.join '\\' end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/