From: Joel VanderWerf Date: 2005-05-07T04:28:15+09:00 Subject: Re: RCR 303: nil should accept missing methods and return nil Jim Weirich wrote: > 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 Very nice! Some elaboration: $ cat missing_obj.rb class MissingObject < StandardError def initialize(comment="") @comment = comment @location = caller[0][/.*?:\d+/] end def method_missing(meth, *args, &block) raise self, "#{@location}: #{@comment}" end end class MissingDatabase < MissingObject; end def get_db_from_user_input end # Using nil: my_db = get_db_from_user_input() begin my_db.lookup("foo") rescue => e p e end # Using a MissingObject my_db = get_db_from_user_input() || MissingDatabase.new("No user input") begin my_db.lookup("foo") rescue => e p e end $ ruby missing_obj.rb # #