Updated with info about bug. Moved Interop section to its own post.
Glad to hear you're having fun. :)
if we were to create a class with a publicly writable attribute
All attributes are private. No matter what. All public access is via public methods. Another comment covers this in more detail.
I can't quite get it to work now:
After some digging I've concluded that one should not use `method` as the routine declarator for the value of the FETCH and STORE arguments to the Proxy but rather `sub`:
# This is NOT a good way to validate for this use case.
# But this code works in my current Rakudo.
class Interval {
has $.lb = die 'Lower bound is required';
has $.ub = die 'Upper bound is required';
method lb() is rw {
return Proxy.new:
# note `sub` declarator and ignored arg:
FETCH => sub ($) { return $!lb; },
# note `sub` declarator and ignored (first) arg
STORE => sub ($, $lb) {
die "Require lb <= ub" unless $lb <= $!ub;
$!lb = $lb;
};
}
method ub() is rw {
return Proxy.new:
FETCH => sub ($) { return $!ub; },
STORE => sub ($, $ub) {
die "Require lb <= ub" unless $!lb <= $ub;
$!ub = $ub;
};
}
}
Using the `method` declarator as a FETCH or STORE routine isn't useful because the self in the called routine (passed in as the first arg, corresponding to the anonymous `$` parameter in the above declarations) would not be the enclosing class.
Update
Has been discussed on #perl6. jnthn landed a fix for a couple of related bugs a few hours later. Your code still won't work though; fixing it will apparently have to wait for now.
|