On Mon, 6 Jan 2003, Michael Lazzaro wrote:
> So we're using "is Blah" here as a method of creating an
> already-instantiated object, not just typing a variable(?) But that,
> in turn, would imply that:
>
> my Foo $a; # declares $a as holding objects of type C<Foo>
> my $a is Foo; # instantiates $a as a C<Foo>.
>
> Oh dear. That looks quite wrong.
I'm still not buying the autoinstantiation argument. All the other
(non-M.L.) threads I have read are requiring
my $a is Foo = .new; # or some such...
Both your examples above create the varible $a, but it contains the value
of undef, not an instance of Foo.
OTOH, you can autoinstantiate arrays and hashes like this:
$a[3]{fum};
which will create an array(ref) in $a containing 3 undefs and a hash(ref)
which contains a single key "fum" with the value of undef.
It would be nice if objects could "inherit" this sort of functionality
from arrays and or hashes. Or perhaps it's a DIY thing:
class Foo {
method do_it ( $x ) {
$_ //= .new;
...
}
}
which may not be entirely syntactically correct, but hopefully you get the
idea. It would be really easy to do if something like a class invariant
existed which ran _before_ each method...
~ John Williams