Finding the instance reference of an object
greg
greg at cosc.canterbury.ac.nz
Mon Nov 10 05:16:13 EST 2008
Arnaud Delobelle wrote:
> // What is passed to foo below is obviously not a 'variable
> // reference' as the argument is not a variable.
> foo(a[3]); // Now a[3] == 7
> foo(b.i); // Now b.i == 7
Yes, it is. By "variable" I mean what C calls an lvalue,
i.e. something you can assign to.
> I'm not sure that your definition of 'call by value' is widely
> accepted. If it was, then this thread wouldn't exist.
It seems to be accepted by the Java and VB community,
judging by what they refer to as call-by-value in those
languages.
You won't necessarily find it written down anywhere in
the exact words I used. I have reverse-engineered it
from the characteristics of a wide variety of languages
that use the term call-by-value to describe one of their
parameter passing mechanisms. Think of it as a theory
that fits the observed linguistic facts.
> (CBV) An evaluation strategy where arguments are evaluated before
> the function or procedure is entered. Only the values of the
> arguments are passed and changes to the arguments within the called
> procedure have no effect on the actual arguments as seen by the
> caller.
That hinges on what exactly is meant by "changes to
the arguments". In Python it can only mean assigning
directly to the bare name -- anything else isn't
changing the argument itself, but something else to
which the argument refers.
--
Greg
More information about the Python-list
mailing list