trait is required

Documentation for trait is required assembled from the following types:

language documentation Type system

From Type system

(Type system) trait is required

Defined as:

multi sub trait_mod:<is>(Attribute $attr:$required!)
multi sub trait_mod:<is>(Parameter:D $param:$required!)

Marks a class or roles attribute as required. If the attribute is not initialized at object construction time throws X::Attribute::Required.

class Correct {
    has $.attr is required;
    submethod BUILD (:$attr{ $!attr = $attr }
}
say Correct.new(attr => 42);
# OUTPUT: «Correct.new(attr => 42)␤» 
 
class C {
    has $.attr is required;
}
C.new;
CATCH { default { say .^name => .Str } }
# OUTPUT: «X::Attribute::Required => The attribute '$!attr' is required, but you did not provide a value for it.␤» 

You can provide a reason why it's required as an argument to is required

class Correct {
    has $.attr is required("it's so cool")
};
say Correct.new();
# OUTPUT: «The attribute '$!attr' is required because it's so cool,␤but you did not provide a value for it.␤»