At 10:48 AM +0000 2/13/02, Dave Mitchell wrote:
>Dan Sugalski <[EMAIL PROTECTED]> wrote:
>>  #2 is what you get with normal assignment. $foo = $bar, for example.
>>  $foo's assign vtable method is called with $bar as a parameter. $foo
>>  figures out what it should do--if it's a tied variable of some sort
>>  it should perform its assign action. (This includes throwing an
>>  exception if the assignment isn't valid) Otherwise it should
>>  typecheck the RHS and morph itself into the RHS's type.
>
>
>So in the following:
>
>my Complex $c = 3+4i;
>my $plain = 1.1;
>$plain = $c;
>
>I presume that $plain ends up as type Complex (with value 3+4i)?
Yup.

>If so, how does $plain know how to "morph itself into the RHS's type"?

The general rule is: If a PMC is not a fixed type, it tosses its 
contents and becomes whatever's assigned to it. If it is a fixed 
type, it extracts what it can as best it can from the source and uses 
that.

In this case, $plain is a boring old scalar, so it becomes a Complex. 
If, later on, you assigned a string to it, it'd become a boring 
scalar with a string component.

On the other hand, $c is a Complex, and you can't assign anything 
that's not a Complex or a subclass of Complex, to it. If you try, the 
destination gets from the source whatever it can that's useable. 
(There's a limited stock of things that can be chosen--various ints, 
floats, or strings) The compiler may also emit typechecking opcodes 
to pitch a fit when you try an incompatible assignment
-- 
                                         Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                       teddy bears get drunk

Reply via email to