Mu - The root of the cperl type hierarchy
class MyClass {
has $a = 1;
}
my MyClass $obj = new MyClass;
print $obj->{a}; # OUTPUT: «1»
Mu provides generic methods for all cperl classes. All classes derive from Mu, the last @ISA entry is always "Mu". The common prefix mu 無 means "not have", "without" in East Asian languages.
Creates a new object as avref with the declared number of fields (i.e. number of has declarations, with padix offsets stored in @CLASSNAME::FIELDS).
The array is shaped, and the field entries are initialized from the given positional args, and if missing from the initial class value, or if that is missing as undef.
:const fields are being initialized without problems, :const only means that the method accessor is not :lvalue.
array fields, like has @a are initialized as array refs, has fields, like has %h are initialized as hash refs.
class XX {
has @a :const = (0..2);
has %h :const;
}
XX->new([0..4],{key => $val});
Creates a new object as avref with the declared number of fields (i.e. number of has declarations, with padix offsets stored in @CLASSNAME::FIELDS). The array is shaped, but the field entries are left empty.
... Many more methods to come, see https://docs.perl6.org/type/Mu
method fields (Mu) :Array(fields)
The fields method on a class or object of a class returns the ordered list of all declared has fields of the class. See "CPERL METHODS" in fields on the available methods.
multi sub defined (Mu) :Bool
multi method defined () :Bool
Returns False on the type object, and True otherwise.
say Int->defined; # OUTPUT: «False»
my Int $i = 42;
say $i->defined; # OUTPUT: «True»
Very few types (like Failure) override defined to return False even for instances:
sub fails() { die 'oh noe' };
say fails()->defined; # OUTPUT: «False»
... Many more subroutines to come, see https://docs.perl6.org/type/Mu