On Fri, 2004-04-30 at 17:58, Austin Hastings wrote:

>   class Session
>   {
>     does ListOfMessages
>          (
>            attribute_base => 'messages',
>            method_base    => 'messages',
>            display_color  => 'black'
>          );
> 
>     does ListOfMessages
>          (
>            attribute_base => 'errors',
>            method_base    => 'errors',
>            display_color  => 'red'
>          );
> 
>     ...
>   }

> Can I just do:
> 
>   role ListOfMessages($attribute_base, $method_base, $display_color) {...}

I think you want a combination of re-dispatch and delegation:

        class Session {
                role EventHandler {
                        # The one and only place you define the behavior
                        method clear() {...}
                        method add() {...}
                        method have() {...}
                        method get() {...}
                }
                class ErrorHanlder {
                        does EventHandler;
                        # Probably should do some funky re-dispatch thing
                        method clear_errors() { .clear() }
                        method add_errors() { .add() }
                        method have_errors() { .have() }
                        method get_errors() { .get() }
                }
                class MessageHanlder {
                        does EventHandler;
                        method clear_messages() { .clear() }
                        method add_messages() { .add() }
                        method have_messages() { .have() }
                        method get_messages() { .get() }
                }
                has ErrorHanlder $:errors handles <<clear_errors add_errors 
have_errors get_errors>>;
                has MessageHandler $:messages handles <<clear_messages add_messages 
have_messages get_messages>>;
        }

That should do what you want.

-- 
Aaron Sherman <[EMAIL PROTECTED]>
Senior Systems Engineer and Toolsmith
"It's the sound of a satellite saying, 'get me down!'" -Shriekback


Reply via email to