The submethod BUILD is (indirectly) called by .bless. It is meant to set private and public attributes of a class and receives all names attributes passed into .bless. The default constructor .new defined in Mu is the method that invokes it. Given that public accessor methods are not available in BUILD, you must use private attribute notation instead.
C&P, straight from the
docs
class C {
has $.attr;
submethod BUILD (:$attr = 42) {
$!attr = $attr
};
};
C.new.say; C.new( attr => 666 );
# 42
# 666
Edit:
The difference between
BUILD and
TWEAK (as mentioned by anonymous monk below) is, that the former happens while the object is constructed, whereas
TWEAK happens
after that, when the object has been fully constructed.
holli
You can lead your users to water, but alas, you cannot drown them.