> > role Logging { > > POST { > > foreach ( ::_.meta.getmethods() ) -> $method { > > $method.wrap( { > > log($somewhere, "calling $method"); > > call; > > log($somewhere, "called $method"); > > } ); > > } > > } > > > > class Foo does Logging { ... } > > > > does something like this make sense? > > Sure, but where is inheritance involved here? Roles are composed into > classes, not inherited from. (That particular Role seems to be messing > with the class though.. its a trait rather than a role... and it will have > to be processed *after* all methods in the class are known (including > those that come from other roles)... all that may render what I say below > meaningless)
Oops, I had missed the POST{}. Sorry about that. Maybe that renders your code workable! But let me understand this: The POST block will be composed into the Class{...} block and would be the last thing that runs. There could be timing issues though: just when is the last block run? After all other class composition work? What if there are two POST blocks? Can a POST add methods? Seems dangerous to me, after the class has gone to all the trouble of making sure that a class is sensibly composed, the POST may just mess things up. Just some paranoid random thoughts... --Abhijit