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 )