Mojo::DynamicMethods - Fast dynamic method dispatch

NAME  SYNOPSIS  DESCRIPTION  FUNCTIONS  register  SEE ALSO 

NAME

Mojo::DynamicMethods − Fast dynamic method dispatch

SYNOPSIS

package MyClass;
use Mojo::Base −base, −signatures;
use Mojo::DynamicMethods −dispatch;
sub BUILD_DYNAMIC ($class, $method, $dyn_methods) {
return sub {...};
}
sub add_helper ($self, $name, $cb) {
Mojo::DynamicMethods::register 'MyClass', $self, $name, $cb;
}
package main;
# Generate methods dynamically (and hide them from "$obj−>can(...)")
my $obj = MyClass−>new;
$obj−>add_helper(foo => sub { warn 'Hello Helper!' });
$obj−>foo;

DESCRIPTION

Mojo::DynamicMethods provides dynamic method dispatch for per-object helper methods without requiring use of "AUTOLOAD".

To opt your class into dynamic dispatch simply pass the "−dispatch" flag.

use Mojo::DynamicMethods −dispatch;

And then implement a "BUILD_DYNAMIC" method in your class, making sure that the key you use to lookup methods in $dyn_methods is the same thing you pass as $ref to "register".

sub BUILD_DYNAMIC ($class, $method, $dyn_methods) {
return sub ($self, @args) {
my $dynamic = $dyn_methods−>{$self}{$method};
return $self−>$dynamic(@args) if $dynamic;
my $package = ref $self;
croak qq{Can't locate object method "$method" via package "$package"};
};
}

Note that this module will summon Cthulhu, use it at your own risk!

FUNCTIONS

Mojo::DynamicMethods implements the following functions.

register

Mojo::DynamicMethods::register $class, $ref, $name, $cb;

Registers the method $name as eligible for dynamic dispatch for $class, and sets $cb to be looked up for $name by reference $ref in a dynamic method constructed by "BUILD_DYNAMIC".

SEE ALSO

Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.


Updated 2024-01-29 - jenkler.se | uex.se