This is great. This would have helped me with my understanding
in the first place. Thank you.

..Otto

> -----Original Message-----
> From: Stevan Little [mailto:stevan.lit...@iinteractive.com]
> Sent: Friday, February 13, 2009 11:02 AM
> To: otto.h...@olabinc.com
> Cc: 'Dave Rolsky'; moose@perl.org
> Subject: Re: Cookbook: basic recipe3: 'before' not needed
> 
> 
> 
> On Feb 13, 2009, at 12:52 PM, Otto Hirr wrote:
> > IMO regardless, even if it makes the recipe more complex, a
> > recipe should be _correct_ which this is not.
> 
> I disagree with that actually. The recipe is correct, it just makes  
> some assumptions. If this were real world production code it 
> would not  
> make these assumptions, but since it is meant to be simple  
> illustrative code primarily for education purposes I think it 
> is okay  
> to make these assumptions.
> 
> And really if we take a look, the only assumption we are making is  
> that the user of this code is not trying to insert a tree 
> node that is  
> already connected to some other part of the tree. I would say that  
> this is user error because this would likely lead cycles (assuming  
> both nodes were connected to the same tree) and then you 
> wouldn't have  
> a tree, you would have a graph.
> 
> > Furthermore the test script never tests this setting condition.
> 
> You are correct, it does not. However, I just committed it so 
> it will  
> be in the next release. I also updated the code as well to be 
> a little  
> more defensive and to just not accept nodes which are already  
> connected elsewhere. Here is what it is now:
> 
> before 'right', 'left' => sub {
>      if (defined $tree) {
>          confess "You cannot insert a tree which already has a parent"
>              if $tree->has_parent;
>          $tree->parent($self);
>      }
> };
> 
> This puts a little more burden on the user to make sure they 
> have all  
> their nodes managed correctly, but as I said above this code is for  
> instructional purposes so I think that is okay.
> 
> - Stevan
> 
> 

Reply via email to