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.
»ö« . o O ( "the celebrity tell-all of the Perl-6 cult?" )
In reply to Re^3: [perl6] Complex Attribute Validation and/or Triggers
by raiph
in thread [perl6] Complex Attribute Validation and/or Triggers
by duelafn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |