logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Function::Parameters::Info - Information about parameter lists

Author

       Lukas Mai, "<l.mai at web.de>"

Description

       "Function::Parameters::info" returns objects of this class to describe parameter lists of functions. See
       below for "Parameter Objects".  The following methods are available:

       $info->invocants

       Returns a list of parameter objects for the variables into which initial arguments are "shift"ed
       automatically (or a count in scalar context). This will usually return "()" for normal functions and
       "('$self')" for methods.

       $info->positional_required

       Returns a list of parameter objects for the required positional parameters (or a count in scalar
       context).

       $info->positional_optional

       Returns a list of parameter objects for the optional positional parameters (or a count in scalar
       context).

       $info->named_required

       Returns a list of parameter objects for the required named parameters (or a count in scalar context).

       $info->named_optional

       Returns a list of parameter objects for the optional named parameters (or a count in scalar context).

       $info->slurpy

       Returns a parameter object for the final array or hash that gobbles up all remaining arguments, or
       "undef" if no such thing exists.

       $info->args_min

       Returns the minimum number of arguments this function requires. This is computed as follows: Invocants
       and required positional parameters count 1 each.  Optional parameters don't count. Required named
       parameters count 2 each (key + value). Slurpy parameters don't count either because they accept empty
       lists.

       $info->args_max

       Returns the maximum number of arguments this function accepts. This is computed as follows: If there are
       any named or slurpy parameters, the result is "Inf".  Otherwise the result is the number of all invocants
       and positional parameters.

       $info->invocant

       Similar to "$info->invocants" above: Returns "undef" if the number of invocants is 0, a parameter object
       for the invocant if there is exactly 1, and throws an exception otherwise.

       ParameterObjects

       Many of the methods described above return parameter objects.  These objects have two methods: "name",
       which returns the name of the parameter (as a plain string), and "type", which returns the corresponding
       type constraint object (or undef if there was no type specified).

       This should be invisible if you don't care about types because the objects also overload stringification
       to call "name". That is, if you treat parameter objects like strings, they behave like strings (i.e.
       their names).

Name

       Function::Parameters::Info - Information about parameter lists

See Also

       Function::Parameters

Synopsis

           use Function::Parameters;

           fun foo($x, $y, :$hello, :$world = undef) {}

           my $info = Function::Parameters::info \&foo;
           my @p0 = $info->invocants;            # ()
           my @p1 = $info->positional_required;  # ('$x', '$y')
           my @p2 = $info->positional_optional;  # ()
           my @p3 = $info->named_required;       # ('$hello')
           my @p4 = $info->named_optional;       # ('$world')
           my $p5 = $info->slurpy;               # undef
           my $min = $info->args_min;  # 4
           my $max = $info->args_max;  # inf

           my @invocants = Function::Parameters::info(method () { 42 })->invocants;
           # ('$self')

           my $slurpy = Function::Parameters::info(fun (@) {})->slurpy;  # '@'

See Also