Hi there,

How do you report the failure of object creation, that is, if you find
it impossible to properly initialize the object in the "initialize"
method?  Raising an exception is clearly an option.  But, what if the
"failure" is a normal part of the flow of the program? as in

   class SomeClass
      def initialize(file)
         line = file.gets
         if line
            # initialize instance vars according to "line"
         else
            return nil ##<- a fictious Ruby feature
         end
      end
   end

   a = Array.new
   f = File.open("datafile", "r")
   loop {
      s = SomeClass.new(f)
      if ! s then  break  end
      a.push(s)
   }
   a.each { ....

I've used a fictious feature that the method "initialize" can return
nil to indicate the failure of creation.  I think this would be
elegant.

An alternative is that you define an instance method which indicates
whether the object is in a normal state or not:

   class SomeClass
      def ok?
         @ok
      end
   end

   f = File.open("datafile", "r")
   s = SomeClass.new(f)
   if (s.ok?) ...

This works, but some programmer might use the name "ok?", others might
use "good?", yet others "integrity_conserved?",...  In C++, there is a
convention that you overload the "not" operator (!) for the class to
do the job, so that you can very often say

   SomeClass s(f);
   if (!s) {...

Is there such a convention in the Ruby community?  Is it feasible to
implement my fictious feature mentioned earlier?  I'd appreciate any
comments.

Thank you,
Ryo