Hi!

I wanted to write a simple method for comparing two paths on a Windows
system.  My initial algorithm felt very contrived:

def same_path?(a, b)
  a, b = [a, b].map{ |p| File.expand_path(p).downcase }
  a == b
end

It felt like saving the result from #map and then doing the comparison
shouldn't be necessary.  So I came up with the following solution:

class Array
  def apply(method)
    shift.send(method, *self)
  end
end

This allowed me to define #same_path? thusly:

def same_path?(a, b)
  [a, b].map{ |p| File.expand_path(p).downcase }.apply(:==)
end

which, to me, looks a lot nicer.  Array#apply takes a method (in a
symbolic manner) and applies it to its first element, passing the rest
of the elements as arguments to the given method.

Any thoughts?  Is Array#apply a method that could potentially have
other uses than my specific example above?

  nikolai