in reply to Re: Leaving a constructor midway?
in thread OO: Leaving a constructor midway?
Definition of Constructor:The constructor is a member function of a class. It is invoked every time an object is created. ...
Surely none of the examples I gave that you call "constructors" are invoked if a new object is created. They are called, and just happen to return an object (which may, or may not, be constructed using 'bless'). Consider the following function:
Would that be a Schr\"odinger cat constructor?sub foo { rand (2) < 1 ? 0 : bless [] => "foo" }
By that definition, your Gonbagger methods one(), two(), and three() are all constructors, as is the lioger1 method from the second example. Gonbagger::four() is not a constructor because it doesn't construct anything. Neither is the lioger2() method.But the client code doesn't know what's going on under the hood, and to quote you:
The fact that, under the hood, it calls bless is completely irrelevant to the client code.
Of course it is. It's making a new instance of the class "ARRAY". You might quibble that $_ [0] might already be an instance of the class 'ARRAY' and therefore it's not constructing a new object, but that's as useful as arguing that $x = 17; isn't an assignment if the value of $x happens to be 17.Surely, you're not going to tell me that confuse() is using bless as a constructor?!?package Foo; sub new { bless [], $_[0] } sub confuse { bless $_[0], 'ARRAY' }
Abigail
|
|---|