> On 5/4/07, Hugh Sasse <hgs / dmu.ac.uk> wrote:
> >+  require 'tasks/rails' {|path| $stderr.puts "require`d #{path]"}

On Fri, May 04, 2007 at 04:54:04PM +0900, George wrote:
> A rudimentary lookup isn't too much more work, is it?
> 
>  $stderr.puts $:.find{|path| File.exist? "#{path}/tasks/rails.rb"}

require can also find .so files, not just .rb files, plus there's no
guarantee that the first file in the path that matches is the one that
was just loaded (e.g. if $: changes after a file of the same name is
loaded).

On 1.9 the full path to the file just loaded is put into $", so this
will work, assuming multiple threads aren't loading files in parallel (a
safe assumption, usually):

  if require('tasks/rails') then
    $stderr.puts "required #{$LOADED_FEATURES[-1]}"
  end

(the exception seems to be enumerator.so, which is added to $" with
rb_provide when ruby is first started)

> Your proposal strikes me as a rather arbitrary use of a block.  I
> might expect it to be run in the event that the require fails, for
> example, or for something to be done after the block finishes.  It
> doesn't have my vote just yet (for the little that's worth :-).

I agree.  I can see the usefulness of this feature, but the use of a
block here doesn't make much sense.

Paul