That idiom can be thought of as the various modules (PDL::Primitive, PDL::Ops) being roles, and they add "methods" to the PDL namespace. The answer to the question here, in order to operate like a typical PDL module, would both export a rp function, and implement a PDL::rp function that would add a PDL-object method. Because this is a function that only makes sense with an ndarray as its input, the natural thing would be to alias the exportable function to the PDL:: version:
It is very important in this specific instance to note that reshape (as seen in PDL::Core#reshape) "changes the ndarray in place", i.e. is a mutation. PDL needs a new withdims affine transformation which would do what the OP thinks reshape does. EDIT: See https://github.com/PDLPorters/pdl/issues/217 for discussion of reshape and its problems.package PDL::CV; use strict; use warnings; use Exporter 'import'; our @EXPORT_OK = qw(rp); *rp = \&PDL::rp; # alternative idiom, e.g. for zeroes: sub zeroes {PDL->zeroes(@_)} sub PDL::rp { my ($self, $input) = @_; $self .= $input->reshape($self->dims); $self; }
In reply to Re^2: how to export a method
by etj
in thread how to export a method
by toothedsword
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |