Documentation for routine self assembled from the following pages:

Language documentation: Terms §

From Terms

(Terms) term self §

Inside a method, self refers to the invocant (i.e. the object the method was called on). If used in a context where it doesn't make sense, a compile-time exception of type X::Syntax::NoSelf is thrown.

Class: Mu §

From Mu

(Mu) method self §

method self(--> Mu)

Returns the object it is called on.

Class: Failure §

From Failure

(Failure) method self §

Defined as:

method self(Failure:D: --> Failure:D)

If the invocant is a handled Failure, returns it as is. If not handled, throws its Exception. Since Mu type provides .self for every class, calling this method is a handy way to explosively filter out Failures:

my $num1 = ''.Int;
# $num1 now contains a Failure object, which may not be desirable 
 
my $num2 = ''.Int.self;
# .self method call on Failure causes an exception to be thrown 
 
my $num3 = '42'.Int.self;
# Int type has a .self method, so here $num3 has `42` in it 
 
(my $stuff = ''.Int).so;
say $stuff.self# OUTPUT: «(HANDLED) Cannot convert string to number…» 
# Here, Failure is handled, so .self just returns it as is