On 7/2/05, Fergal Daly <[EMAIL PROTECTED]> wrote:
> Here's a way of looking at it that doesn't require you to consider
> what happens if you alter the structures.
> 
> Let's say you have a Person class with a Name an Age and a House class
> with Owner and Resident.
> 
> Now imagine there are 2 people who have the same name and age but are
> different people.
> 
> my $p1 = Person->new(Name => "Fergal Daly", Age => 31);
> my $p2 = Person->new(Name => "Fergal Daly", Age => 31);
> 
> They live in 2 houses but one of the owns both houses.
> my $h1 = House->new(Owner => $p1, Resident => $p1);
> my $h2 = House->new(Owner => $p1, Resident => $p2);
> 
> The houses look identical if you only consider values however Yves
> wants to also consider identities. $h1 is owner-occupied $h2 is
> presumably being rented.
> 
> Here's what CalculateRent could look like:
> 
> sub CalculateRent
> {
>   my $house = shift;
>   if ($house->Owner eq $house->Resident)
>   {
>     return 0;
>   }
>   else
>   {
>     return ValueHouse($house) / 360;
>   }
> }
> 
> so curently
> 
> is_deeply($h1, $h2)
> 
> passes but
> 
> CalculateRent($h1) == CalculateRent($h2)
> 
> fails so there it definitely something unequal about $h1 and $h2.
> There is a stronger form of equality that could be tested which would
> guarantee that if
> 
> is_really_deep($h1, $h2)
> 
> passes then
> 
> AnyFunction($h1) == AnyFunction($h2)
> 
> would also pass (assuming there are no conflicting side effects and
> assuming nothing looks directly at reference addresses - apart from
> debugging, there's no reason to ever do this anyway),

Yes this is an excellent explanation. A simplification futher would be:

You are playing on some TV gameshow. You've won the big prize: a
house. Now the thing is that the presenter gives you a choice of two
envelopes. Both contain two house addresses. However one contains the
same address twice and the other contains two seperate addresses.

The folks that argue that [$x,$x] is no different from [$x,$y] would
say that it doesnt matter which envelope you choose as there is no
difference. Those of use saying that [$x,$x] is different from [$x,$y]
would suggest the opposite.

Which envelope would you choose?

:-)

yves

-- 
perl -Mre=debug -e "/just|another|perl|hacker/"

Reply via email to