Acme-CPANModules-MultipleDispatch

 view release on metacpan or  search on metacpan

lib/Acme/CPANModules/MultipleDispatch.pm  view on Meta::CPAN

package Acme::CPANModules::MultipleDispatch;

use strict;
use warnings;
use Acme::CPANModulesUtil::Misc;

our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2024-07-01'; # DATE
our $DIST = 'Acme-CPANModules-MultipleDispatch'; # DIST
our $VERSION = '0.001'; # VERSION

my $text = <<'MARKDOWN';
**About multiple dispatch**

Multiple dispatch is a technique where you can define /multiple/ functions (or
methods) of the same name but with different signatures (e.g. different type of
arguments, different number of arguments) and the runtime will choose
(/dispatch/) the correct function by matching the signature of the caller to
that of the defined functions.

This technique has several benefits, mostly simplifying user code particularly
when dealing with different types/arguments, because you are deferring the
checks to the runtime. For example, if you create a function to concat two
strings:

    function combine(Str a, Str b) {
        a + b;
    }

and later wants to support some other types, instead of peppering the original
function with `if` statements, you can just supply additional functions with the
same name but with different arguments you want to support:

    function combine(Num a, Num b) {
        a.as_str() + b.as_str();
    }

    function combine(File a, File b) {
        a.open().read() + b.open().read();
    }

Some languages, particularly strongly-typed ones, support multiple dispatch:
Julia, C#, Common Lisp, Groovy. Raku (Perl 6) also supports multiple dispatch.

Perl 5 does not. But some modules will allow you to fake it.


**Modules**

<pm:Multi::Dispatch>. By DCONWAY.

<pm:Dios>. Also by DCONWAY. An object system which supports multiple dispatch.

<pm:Class::Multimethods>. Older module by DCONWAY.


**Keywords**

multi dispatch, multisub, multimethod.

MARKDOWN

our $LIST = {
    summary => 'List of modules to do smart matching',
    description => $text,
    tags => ['task'],
};

Acme::CPANModulesUtil::Misc::populate_entries_from_module_links_in_description;

1;
# ABSTRACT: List of modules to do smart matching

__END__

=pod

=encoding UTF-8

=head1 NAME

Acme::CPANModules::MultipleDispatch - List of modules to do smart matching

=head1 VERSION

This document describes version 0.001 of Acme::CPANModules::MultipleDispatch (from Perl distribution Acme-CPANModules-MultipleDispatch), released on 2024-07-01.

=head1 DESCRIPTION

B<About multiple dispatch>

Multiple dispatch is a technique where you can define /multiple/ functions (or
methods) of the same name but with different signatures (e.g. different type of
arguments, different number of arguments) and the runtime will choose
(/dispatch/) the correct function by matching the signature of the caller to
that of the defined functions.

This technique has several benefits, mostly simplifying user code particularly
when dealing with different types/arguments, because you are deferring the
checks to the runtime. For example, if you create a function to concat two
strings:

 function combine(Str a, Str b) {
     a + b;
 }

and later wants to support some other types, instead of peppering the original
function with C<if> statements, you can just supply additional functions with the
same name but with different arguments you want to support:

 function combine(Num a, Num b) {
     a.as_str() + b.as_str();
 }
 
 function combine(File a, File b) {
     a.open().read() + b.open().read();
 }

Some languages, particularly strongly-typed ones, support multiple dispatch:
Julia, C#, Common Lisp, Groovy. Raku (Perl 6) also supports multiple dispatch.

Perl 5 does not. But some modules will allow you to fake it.

B<Modules>

L<Multi::Dispatch>. By DCONWAY.

L<Dios>. Also by DCONWAY. An object system which supports multiple dispatch.

L<Class::Multimethods>. Older module by DCONWAY.

B<Keywords>

multi dispatch, multisub, multimethod.

=head1 ACME::CPANMODULES ENTRIES

=over

=item L<Multi::Dispatch>

Author: L<DCONWAY|https://metacpan.org/author/DCONWAY>

=item L<Dios>

Author: L<DCONWAY|https://metacpan.org/author/DCONWAY>

=item L<Class::Multimethods>

Author: L<DCONWAY|https://metacpan.org/author/DCONWAY>

=back

=head1 FAQ

=head2 What is an Acme::CPANModules::* module?

An Acme::CPANModules::* module, like this module, contains just a list of module
names that share a common characteristics. It is a way to categorize modules and



( run in 1.477 second using v1.01-cache-2.11-cpan-39bf76dae61 )