Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: ?Re: Change the parent of an instance

by muba (Priest)
on May 11, 2004 at 18:34 UTC ( #352534=note: print w/ replies, xml ) Need Help??


in reply to •Re: Change the parent of an instance
in thread Change the parent of an instance

What's wrong with reblessing then? The variable keeping track of the actual type might be a good idea, but many of the methods will then look like

if ($somehow_is_a_foe) { } else { }
because the two share a lot, although they hardly share anything.

Update: I have not yet thought about re-blessing. I think it's a good idea, worthwhile trying but if you say it's bad (or at least, will suck) I'll be glad to know why, just to find out if re-blessing is what I want.


Comment on Re: ?Re: Change the parent of an instance
Download Code
•Re: Re: ?Re: Change the parent of an instance
by merlyn (Sage) on May 11, 2004 at 18:43 UTC
    No, I mean you plug it like this:
    package Elf; sub named { my $class = shift; bless { Name => shift; Actions => Elf::Live::, Has => {}, }, $class; } sub die { shift->{Actions} = Elf::Dead::; } sub can_attack { # delegate to actions shift->{Actions}->can_attack(@_); } sub enemy_of { shift->{Actions}->enemy_of(@_); } package Elf::Live; sub can_attack { ... } sub enemy_of { ... } package Elf::Dead; sub can_attack { ... } sub enemy_of { ... }
    A simple change of the Actions variable by plugging in a different "behavior container" causes a bank-switch of those behaviors to a new motif. I forget the "gang of four" pattern for this, but it's one of those. {grin}

    -- Randal L. Schwartz, Perl hacker
    Be sure to read my standard disclaimer if this is a reply.

      Ah! Now I see!

      I think it's the best idea I've seen so far, assuming re-blessing really sucks. I'll have a look at it (a big re-style of the code is now required but it's worth it).

      Just for my information, could you please tell me the disadvanteges of re-blessing?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://352534]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (12)
As of 2015-07-06 19:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (81 votes), past polls