On Sat, 5 Oct 2002, John Williams wrote:
: I think everyone agrees that some sort of simple accessor syntax will be
: included (instead of the getX/setX hack). But will accessors _look_ like
: attributes or methods?
:
: # look like methods
: object.foo($value);
:
: # look like attributes
: object.foo = $value;
:
: Personally, I hope they look like attributes.
They will, outside the class anyway. Inside it's $.foo.
: But if they do, the perl5
: lvalue subs are not the way to do it. Why? Because an lvalue sub returns
: a lvalue which get set _after_ the sub returns. At that point it is too
: late for the sub to do anything useful with the new value.
Lvalue methods will have some kind of optional property which specifies
a closure to execute after the modification happens.
method foo {
my $handle = find_database("random criteria");
return $handle.fetch();
WRITE {
$handle.store(shift);
}
}
Or some such. Note how the internal block allows capture of the $handle from
the original closure. (A READ closure was also discussed in Zurich.)
Potentially there's also an "also" approach, which adds a closure to
an implicit autogenerated method:
has $.foo is public;
also &foo is write { write_database($_) };
Except that $_ (the first arg) should maybe be the object, not the
new value. How do we name the parameter? Hmm...
also &foo is write ->:$newval { db_store($newval); .written(1); };
Yow.
Larry