Austin Ziegler said:
> For a very small class of problems, this will work. For anything
> that has to interact outside of the Ruby program in question, this
> is -- and always will be -- a disaster.

As I mentioned before, I'm in the "throw an exception" camp.  But the
argument that it will be a "disaster" sounds like the type of arguement a
static typer levels againts dynamic languages.  So, I'm open to an
experiment.

And the first opportunty came up today.  I am revising some command line
scripts that access a database.  You have to specify an environment so
that the proper database case be choson.  I forgot to specify the
environment and got:

  $ ruby -Ilib bin/info.rb r887
  lib/ics/folderid.rb:83:in `translate_rids': undefined method `sql' for
nil (NameError)

Then I added the -rnilify argument...

  $ ruby -rnilify -Ilib bin/info.rb r887
  Can't find folder for ID r887

So, adding in a message eating nil causes the script to think it can't
find the appropriate folder.  While true, it is certainly not the best
error message that could be produced.  I would imagine that tracing down
the source of this error would be more difficult than the other message. I
knew exactly what the problem was when I saw the NameError.  The "can't
find" error leaves plenty of room for other possibilities.

So, at first blush, I'm still in the "throw an exception" camp.

On a side note, this whole discussion inspired me to solve the problem in
an interesting way.  I just make sure I initialize the database object
with an instance of the following class:

  class MissingDatabase
    def method_missing(sym, *args, &block)
      fail "No Database Specified"
    end
  end

-- 
-- Jim Weirich     jim / weirichhouse.org    http://onestepback.org
-----------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct,
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)