[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: assignment, reference, += and parameter passing



The semantics of "+=" don't have this possible ambiguity in Smalltalk
because "+=" is not a special operator. I.e., everything is a message
and any message can be defined/redefined at any time by an implementor
(or dynamically in a running system since the compiler is typically
always available to recompile methods -- which is effectively how
eval-works with anonymous/unbound methods).

    Method behavior: AnyClassOrInterfaceIWant [
    += anArg
        "do whatever I want, cuz this is just a method"
    ]

-- Dave S. [SmallScript LLC]

SmallScript for the AOS & .NET Platforms
David.Simmons@SmallScript.com | http://www.smallscript.org


> -----Original Message-----
> From: owner-ll1-discuss@ai.mit.edu
[mailto:owner-ll1-discuss@ai.mit.edu]
> On Behalf Of Justin Sheehy
> Sent: Tuesday, December 18, 2001 8:21 PM
> To: Pixel
> Cc: ll1-discuss@ai.mit.edu
> Subject: Re: assignment, reference, += and parameter passing
> 
> Pixel <pixel@mandrakesoft.com> writes:
> 
> > Python
> >   pass-by-ref except for numbers and strings
> 
> You misunderstand Python's assignment and parameter passing model.
> 
> It is always "pass by object reference".
> 
> All names are bound to object references.  Parameters are
> bound by object references.  The value in the object has absolutely
> nothing to do with this.  In this way "=" and parameter passing are
> basically equivalent.
> 
> Numbers and strings are passed in exactly the same way as are lists,
> class instances, or anything else.  They are simply the content of an
> object that is being referenced.
> 
> The source of your confusion may be that "=" and "+=" operate in a
> very different way from each other.  (In my opinion "+=" should not
> have been added, precisely because of this confusion.)
> 
> a = b
> 
>   This always binds a to refer to the same object as b.
> 
> def f(x):
>     do something with x
> f(a)
> 
>   This always binds x to refer to the same object as a, regardless of
>   the type of the value in that object.
> 
> a += b
> 
>   This is a bit funny.  Generally, if a refers to a mutable object
such
>   as a list, this modifies the existing object that a refers to.  If a
>   refers to an immutable object such as an int, this rebinds a to
>   refer to a new object obtained by adding a and b.
> 
> -Justin
> 
>