class Submethod
class Submethod is Routine {}
A Submethod is a method that is not inherited by child classes. They are
typically used for per-class initialization and tear-down tasks which
are called explicitly per class in an inheritance tree, usually for
enforcing a particular order. For example object construction with the
BUILD
submethod happens from the least-derived to most-derived, so
that the most-derived (child) classes can depend on the parent already
being initialized.
Submethods are of type Submethod
, and are declared with the
submethod
declarator:
class Area {
has $.size;
submethod BUILD(:$x, :$y, :$z) {
$!size = $x * $y * $z;
}
}
Since submethods are not inherited, an interesting use case is precisely
methods that are going to be called from the standard submethods such as
BUILD
or TWEAK
.
class Hero {
has @.inventory;
has Str $.name;
submethod BUILD( :$!name, :@!inventory ) {
@!inventory = self.clean-inventory( @!inventory );
}
submethod clean-inventory( @inventory ) {
@!inventory.unique.sort
}
}
my Hero $þor .= new( name => "Þor",
inventory => ( "Mjölnir", "Megingjörð", "Mjölnir" ) );
say $þor.inventory;
# OUTPUT: «[Megingjörð Mjölnir]»
Invoking these methods make sense only in the specific context of the submethod it is invoked from.
Methods
method gist
multi method gist(Submethod:D:)
Returns the name of the submethod.