|
NAMEMojo::DynamicMethods - Fast dynamic method dispatchSYNOPSISpackage 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; DESCRIPTIONMojo::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! FUNCTIONSMojo::DynamicMethods implements the following functions.registerMojo::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 ALSOMojolicious, Mojolicious::Guides, <https://mojolicious.org>.
Visit the GSP FreeBSD Man Page Interface. |