Mark Stosberg wrote:
> On 2005-07-05, Michael Peters <[EMAIL PROTECTED]> wrote:
> 
>>Mark Stosberg wrote:
>>
>>>>Jason Purdy wrote:
>>>>
>>>>I foresee a need for a setup hook for the BREAD plugin, to dynamically
>>>>create runmodes.
>>>
>>>
>>>I think you can just define these at the init() stage when the same effect. 
>>>
>>>You will have access to the object then (not just the class), and can call 
>>>the
>>>run_modes() method normally from your callback.
>>>
>>>Maybe that's the answer to why we don't need a setup() hook location. :)
>>
>>It still doesn't let you register things on an object basis. init can
>>only be run before new(). I can't think of a use case where this would
>>matter, but it might. Would anyone ever want to change a default (that
>>couldn't be changed at prerun) or add a run mode to just an object and
>>not a class?
> 
> 
> I think you are wrong. Looking at the source code of new(),
> 
> We can see the object creation:
> 
>     # Create our object!
>     my $self = {};
>     bless($self, $class);

Right, but how do you register a callback for init on this newly blessed
object? You won't see it until after the init hook is already called.

> Later followed by the call to the init hook, which would have this new
> object available. 
> 
>     # Call cgiapp_init() method, which may be implemented in the sub-class.
>     # Pass all constructor args forward.  This will allow flexible usage
>     # down the line.
>     $self->call_hook('init', @args);

For instance, in an overridden version of new() that exists in my sub
class...

sub new {
  my $class = shift;
  my $self = $class->SUPER::new();
  $self->add_callback( init => sub{ ... });
}

That callback will never get run.

-- 
Michael Peters
Developer
Plus Three, LP


---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/[email protected]/
              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to