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