Documentation for routine defined assembled from the following pages:

Class: Mu §

From Mu

(Mu) method defined §

Declared as

multi method defined(   --> Bool:D)

Returns False on a type object, and True otherwise.

say Int.defined;                # OUTPUT: «False␤» 
say 42.defined;                 # OUTPUT: «True␤»

A few types (like Failure) override defined to return False even for instances:

sub fails() { fail 'oh noe' };
say fails().defined;            # OUTPUT: «False␤»

Class: Mu §

From Mu

(Mu) routine defined §

Declared as

multi sub defined(Mu --> Bool:D)

invokes the .defined method on the object and returns its result.

Class: Failure §

From Failure

(Failure) method defined §

Defined as:

multi method defined(Failure:D: --> Bool:D)

Returns False (failures are officially undefined), and marks the failure as handled.

sub f() { fail };
my $v = f;
say $v.handled# OUTPUT: «False␤» 
say $v.defined# OUTPUT: «False␤» 
say $v.handled# OUTPUT: «True␤»

Class: Junction §

From Junction

(Junction) method defined §

Defined as:

multi method defined(Junction:D:)

Checks for definedness instead of Boolean values.

say ( 3 | Str).defined ;   # OUTPUT: «True␤» 
say (one 3Str).defined;  # OUTPUT: «True␤» 
say (none 3Str).defined# OUTPUT: «False␤»

Failures are also considered non-defined:

my $foo=Failure.new;
say (one 3$foo).defined# OUTPUT: «True␤»

Since 6.d, this method will autothread.