Provided by: libobject-pad-classattr-struct-perl_0.06-2_amd64 bug

NAME

       "Object::Pad::ClassAttr::Struct" - declare an "Object::Pad" class to be struct-like

SYNOPSIS

          use Object::Pad;
          use Object::Pad::ClassAttr::Struct;

          class Colour :Struct {
             # These get :param :mutator automatically
             field $red   = 0;
             field $green = 0;
             field $blue  = 0;

             # Additional methods are still permitted
             method lightness {
                return ($red + $green + $blue) / 3;
             }
          }

          my $cyan = Colour->new( green => 1, blue => 1 );

          # A positional constructor is created automatically
          my $white = Colour->new_values(1, 1, 1);

DESCRIPTION

       This module provides a third-party class attribute for Object::Pad-based classes, which
       applies some attributes automatically to every field added to the class, as a convenient
       shortcut for making structure-like classes.

CLASS ATTRIBUTES

   :Struct
          class Name :Struct ... { ... }

       Automatically applies the ":param" and ":mutator" attributes to every field defined on the
       class, meaning the constructor will accept parameters for each field to initialise the
       value, and each field will have an lvalue mutator method.

       In addition, the class itself gains the ":strict(params)" attribute, meaning the
       constructor will check parameter names and throw an exception for unrecognised names.

       Since version 0.04 a positional constructor class method called "new_values" is also
       provided into the class, which takes a value for every field positionally, in declared
       order.

          $obj = ClassName->new_values($v1, $v2, $v3, ...);

       This positional constructor must receive as many positional arguments as there are fields
       in total in the class; even the optional ones. All arguments are required here.

       Since version 0.05 the following options are permitted inside the attribute value
       parentheses:

       :Struct(readonly)

       Instances of this class do not permit fields to be modified after construction. The
       accessor is created using the ":reader" field attribute rather than ":mutator".

AUTHOR

       Paul Evans <leonerd@leonerd.org.uk>