There are four different types of a function. (both method and sub)
- `multi`
- `proto`
- `only`
- `anon`
A `proto` function is mainly just to declare there will be multiple
functions with same name.
`multi` is short for "multiple", meaning more than one.
`only` is the default, it means there is only one.
`anon` is for creating a lambda. (You only need it if you give the function
a name.)
Again this applies to both subs and methods.
(Also `regex`, `token`, and `rule`. As they are just special methods.)
only sub foo (){}
only sub foo (1){} # ERROR: redeclaration
# note that `only` is optional, as it is the default.
proto sub bar (|){*}
multi sub bar (){}
multi sub bar (1){}
# note that defining a `proto` function is optional
my $var = anon sub baz (){ 'fuzz' };
say baz(); # ERROR: can't find a sub named `baz`
say $var(); # fuzz
say $var.name; # baz
On Sun, Jun 7, 2020 at 3:15 AM ToddAndMargo via perl6-users <
[email protected]> wrote:
> Hi All,
>
> Dumb question:
>
> Does the "multi" in "multi method" mean there
> is more than one way to address a method?
>
> Or, are the all methods "multi methods".
>
> If not and the method is a multi, should not the
> documentation show all (more than one) the ways of
> addressing a multi method?
>
> Many thanks,
> -T
>