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 > >