Hi,
I'm new to Ruby and still trying to figure out how best to do things
"the Ruby way". The particular problem I am looking at now is the
initialize method of a class I am writing. Several things can go wrong
in calls to new for this class ranging from the caller specifying
incompatible parameters to database calls failing.
What is the perferred method of handling such errors? Simply raising
exceptions and returning nil?
Cheers, Russell
···
--
Posted via http://www.ruby-forum.com/.
Russell Fulton wrote:
Hi,
I'm new to Ruby and still trying to figure out how best to do things "the Ruby way". The particular problem I am looking at now is the initialize method of a class I am writing. Several things can go wrong in calls to new for this class ranging from the caller specifying incompatible parameters to database calls failing.
What is the perferred method of handling such errors? Simply raising exceptions and returning nil?
Cheers, Russell
You don't really have any choice. The return value from 'new' is an instance of the class, never nil. (Okay, some clever Rubyists could think of a way to make it nil, but no user of your class should ever be asked to handle that case.) If your initialize method can fail, it should raise an exception.
tim-hunter wrote:
You don't really have any choice. If your initialize method can fail, it
should raise an exception.
Great, that's what I thought but I wanted to make sure. None of the
examples I found in books handled errors in new().
Thanks Tim.
···
--
Posted via http://www.ruby-forum.com/\.
Hm, no, that's not quite right
class Foo
def self.new
super
rescue Exception
nil
end
def initialize
raise "Bah!"
end
end
It's not ideal, and it would probably be better to do something like:
class Bar
class << self
private :new
def create(*args, &block)
ob = self.allocate
ob.initialize(*args, &block)
ob
rescue Exception
nil
end
end
def initialize(*args, &block)
raise "Empty!" if args.empty
@args = args
end
attr_accessor :args
end
That is, it's better to use a different method than new.
-austin
···
On 12/5/05, Timothy Hunter <cyclists@nc.rr.com> wrote:
Russell Fulton wrote:
> Hi,
> I'm new to Ruby and still trying to figure out how best to do things
> "the Ruby way". The particular problem I am looking at now is the
> initialize method of a class I am writing. Several things can go wrong
> in calls to new for this class ranging from the caller specifying
> incompatible parameters to database calls failing.
>
> What is the perferred method of handling such errors? Simply raising
> exceptions and returning nil?
You don't really have any choice. The return value from 'new' is an
instance of the class, never nil. (Okay, some clever Rubyists could
think of a way to make it nil, but no user of your class should ever be
asked to handle that case.) If your initialize method can fail, it
should raise an exception.
--
Austin Ziegler * halostatue@gmail.com
* Alternate: austin@halostatue.ca