From: furufuru@... (Ryo Furue) Date: 2001-08-15T12:51:00+09:00 Subject: [ruby-talk:19755] "new" returning nil: how to report the failure of object creation 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