Rules / Types, classes & roles / exception

X::Attribute::Required Reference

Compilation error due to not declaring an attribute with the C<is required> trait

What it is #

Routines #

Signatures are reproduced from the documentation, including their declared return types. A routine listed here is part of the type's published interface; whether Raku++ implements it is a separate question, answered by the examples below.

method name #

method name(--> Str:D)

Returns Str:D.

Returns the name of the attribute.

method why #

method why(--> Str:D)

Returns Str:D.

Returns the reason why that attribute is required, and it will be included in the message if provided. That reason is taken directly from the is required trait.

Examples, run three ways #

Every example below comes from the official documentation, together with the output that documentation asserts. Each was then executed by Rakudo and by Raku++ when this page was built. Where the three agree, one result is shown; where they do not, all three are — because which of them is wrong is exactly the information worth having.

4 no-output

class X::Attribute::NoPackage does X::MOP { }

Not executed: the documentation states no expected output for this example.

my class Uses-required {
has $.req is required
};
my $object = Uses-required.new()

Not executed: the documentation states no expected output for this example.

OUTPUT: «(exit code 1) The attribute '$!req' is required, but you did not provide a value for it.␤»

Not executed: the documentation states no expected output for this example.

my class Uses-required {
has $.req is required("because yes")
};
my $object = Uses-required.new();                                  │
# OUTPUT:
# «(exit code 1) The attribute '$!req' is required because because yes,␤
# but you did not provide a value for it.␤»

Not executed: the documentation states no expected output for this example.