In Routine§
See primary documentation in context for trait is rw
multi trait_mod:<is>(Routine $r, :$rw!)
When a routine is modified with this trait, its return value will be writable. This is useful when returning variables or writable elements of hashes or arrays, for example:
sub walk(\thing, *@keys) is rw { my $current := thing; for @keys -> $k { if $k ~~ Int { $current := $current[$k]; } else { $current := $current{$k}; } } $current; } my %hash; walk(%hash, 'some', 'key', 1, 2) = 'autovivified'; say %hash.raku;
produces
("some" => {"key" => [Any, [Any, Any, "autovivified"]]}).hash
Note that return
marks return values as read only; if you need an early exit from an is rw
routine, you have to use return-rw
instead.
In Type system§
See primary documentation in context for trait is rw
sub trait_mod:<is>(Mu:U $type, :$rw!)
The trait is rw
on a class will create writable accessor methods on all public attributes of that class.
class C is rw { has $.a; }; my $c = C.new.a = 42; say $c; # OUTPUT: «42»