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
In reply to Re: Leaving a constructor midway?
by Abigail-II
in thread OO: Leaving a constructor midway?
by jest
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |