All four subs return a blessed object. Do you call all of them constructors? Would you call an accessor method that happens to return an object (instead of say a string or a number) a constructor? After all, the returned value is something that "looks, talks, and walks like an object." Client code doesn't know what's going on under the hood.my $snickle = CGI -> new; package Gonbagger; sub one {bless [] => "Fumble"} sub two {one} sub three {two} sub four {$snickle}
Java and Ruby have methods that are constructors. They are special, in the sense that they are called implicitely, and can't/shouldn't be called directly. Unlike Perl's class methods that just happen to return an object.
What if I write my class like this:
Are both methods constructors?package Lioger; use Exporter (); @Lioger::EXPORT = qw /lioger1/; @Lioger::ISA = qw /Exporter/; sub lioger1 { return if @_; my $x = bless [] => __PACKAGE__; $x [0] = $x; } sub lioger2 { ${$_ [0]} [0] }
Language like Java, Ruby and C++ don't call just any function that happens to return an object a "constructor".
Abigail
In reply to Re: Leaving a constructor midway?
by Abigail-II
in thread OO: Leaving a constructor midway?
by jest
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |