Skip to content

O(1)ish solution to Perl's given/when or match/case, convert familiar static hash-key based dispatch

Notifications You must be signed in to change notification settings

oodler577/p5-Dispatch-Fu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

p5-Dispatch-Fu

This is currently the proof of concept of an idea I had to solve generally the given/when or so-called "smart match' problem by offering a syntax (thanks again to Perl's prototype coercions) that semantically allow one to deduce any set of values into a static key according to a custom reduction operation they create; then use that key to do an O(1) dispatch.

The solution is tiny and uses the accumlator nature of prototypes. All complexity is offloaded to the custom implemention of the fu block. Assuming the fu block is fast, the entire dispatch will be fast.

use strict;
use warnings;
use Dispatch::Fu;    # exports 'fu' and 'on'

my $bar = [qw/1 2 3 4 5/];

fu {
    # here, give a reference $bar of any kind,
    # you compute a static string that is added
    # via the 'on' keyword; result will be
    # 'bucket' + some number in in 0-5

    my $baz = shift;
    return ( scalar @$baz > 5 )
      ? q{bucket5}
      : sprintf qq{bucket%d}, scalar @$baz;
}
$bar,
  on bucket0 => sub { print qq{bucket 0\n} },
  on bucket1 => sub { print qq{bucket 1\n} },
  on bucket2 => sub { print qq{bucket 2\n} },
  on bucket3 => sub { print qq{bucket 3\n} },
  on bucket4 => sub { print qq{bucket 4\n} },
  on bucket5 => sub { print qq{bucket 5\n} };

About

O(1)ish solution to Perl's given/when or match/case, convert familiar static hash-key based dispatch

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages