FAQ

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

Search Discussions

Discussion Posts

Previous

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 4 of 6 | next ›
Discussion Overview
groupperl6-language @
categoriesperl
postedDec 8, '09 at 11:59p
activeDec 10, '09 at 5:31p
posts6
users3
websiteperl6.org

People

Translate

site design / logo © 2021 Grokbase