[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
Re: On Pseudohashes
>Tom Christiansen <tchrist@chthon.perl.com> writes:
>>
>> * Compile-time detection of the validity of $obj->attribute()
>> in addition to just $obj->{"attribute"}. In the general case,
>> this lies somewhere between hard and impossible.
>How so? In both cases you have to "know" what class $obj is/can be.
>my Dog $spot;
>Gives as much or as little information to either.
> $spot->{'tail_colour'}
>or
> $spot->bark;
>You either look in $Dog::FIELDS{'name'} or CV of $Dog::{'name'}
>(Perhaps %FIELDs should have been part of the stash ...)
I'm not sure, but I think I was just worried about figuring out
whether a particular assignment was legal:
my Dog $spot = frobnicate();
But that doesn't matter. All you care about is whether the methods
invoked against whatever happens at run time to have taken up
residence in the $spot variable. So long as that class's @ISA and
package symbol table are populated at compile-time with the same
data as they'll ever hold at run-time, you could do the check.
Likewise recursively for parent classes.
The presence of an AUTOLOAD anywhere in the graph seems to make
compile-time validation pointless. One might have to restrict
people to using "real" method calls, such as those generated via
closures in a loop, to generate compiler-detectable cases:
for $attr (@attrlist) {
*$attr = sub { .... };
}
rather than
sub AUTOLOAD {
my $self = shift;
my $attr = $AUTOLOAD;
$attr =~ s/.*:://;
die "bad call $AUTOLOAD" unless $ok_attr{$attr};
...
}
--tom
- Follow-Ups from:
-
Tim Bunce <Tim.Bunce@ig.co.uk>
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]