| ☞ | Program
Repair Shop ![]() |
61 |
92 if ( ref $o eq 'CODE' ) {
93 $o->( $item, $action, @params );
95 else {
96 $o->update( $item, $action, @params );
This is so that you can use a plain subroutine as an observer
my $a = Alarm->new;
$a->add_observer(\&complain);
$a->notify_observers("I like pie!"); # Calls complain()
I considered eliminating the special case
Have add_observer convert the raw coderef to an object:
if (ref $o eq "CODE") {
$o = Class::Observer::CODEObserver->new($o);
}
I thought for sure this would be simpler
I was wrong
The special case moved from notify_observers to add_observer
(No net benefit)
Deletion became impossibly complicated
Try it both ways
You won't know unless you try
| ☞ | ![]() |
☞ |