On Wed, 2009-12-09 at 00:16 -0500, Austin Hastings wrote:
> Geoffrey Broadwell wrote:
> > On Tue, 2009-12-08 at 18:58 -0500, Austin Hastings wrote:
> >   
> >> I know that I could 'metaprogram' this stuff by using string 
> >> manipulation on the various method names, and then calling a 
> >> (self-built) call_method($obj, $method_name, ...args...) function.
> >
> > You don't need to write this by hand.  NQP-rx supports the method call
> > by name Perl 6 syntax:
> >
> >     $obj."$method_name"(...args...);
> 
> The problem I have with the above is that it seems to require a second 
> layer of call. Something like:
> 
>     sub beforeall_methods() { return 
> fetch_methods_by_category('beforeall'); }
> 
>     sub fetch_methods_by_category($cat) {...}
> 
> Essentially, it's one level of function call to translate code into data 
> (method name into string) and then the "template" function is the second 
> layer of call.

I'm not entirely sure what you mean here by "translate code into data
(method name into string)".  The method name is already a string, which
is why I offered the "call by name" syntax above.  But of course if you
have a code object for the method itself, you could do this in Perl 6:

    $obj.$method(...args...);

Sadly this does not currently work in NQP-rx, though IIUC there's no
reason it couldn't (and in fact I've already requested this feature
because it would be useful for some function table stuff I do).

Full Perl 6 offers a number of features that would be useful for calling
a whole pile of dynamically-chosen methods on an object, but few have
been implemented in NQP-rx.  (I would assume because there hasn't been a
lot of demand for it yet.)

I'll let the Perl 6 gurus follow up with actual syntax examples for some
of these nifty features.  ;-)


-'f


Reply via email to