in reply to Re^2: Raku classes: syntax question
in thread Raku classes: syntax question
That's a good question and a good answer. Raku (like perl) has some niceties as you dig in ... but the defaults are set at "easy"
Consider this...
use v6; class Point { has $.x is rw = 0; has $.y is rw = 0; method gist { "[$.x, $.y]" } method set( :$joe = $.x, :$susan = $.y ) { #method set( :$joe = $!x, :$susan = $!y ) { $.x = $joe; $.y = $susan; } } class Pixel is Point { has Int $.x is rw = 0; has Int $.y is rw = 0; has $.color = '#000000'; } my $point = Pixel.new(); #my $point = Point.new(); say $point.x; # 0 say $point; # [0, 0] # $point.x = 3; Error! $point = Pixel.new(x => 3, y => 5); #$point = Point.new(x => 3, y => 5); say $point; # [3,5] $point.set(joe => 10, susan => 20); say $point; # [10, 20] $point.set(joe => 100); say $point; # [100, 20]
The $!x / $!y variant does not work because it directly refers to the PRIVATE ATTR of the Point class. But, in this case, we have used inheritance to override the Point x/y with Pixel x/y. So, when you need to reach for inheritance then the $.x / $.y variants help ... since they are the same as saying self.x and self.y - ie. they route via the settor / getter METHODS.
We need the 'is rw' to ask raku to make a settor method so that $.x = $joe; $.y = $susan; can use the assignment operation to set attr values
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Raku classes: syntax question
by p6steve (Sexton) on Feb 05, 2024 at 22:25 UTC |