First of all, Pike calculates the values of all the arguments. In
the call
average(19.0 + 11.0, 10.0)
the two arguments are calculated, giving the values 30.0 and
10.0. Then the argument values are sent to the method. If we
look at the method head,
float average(float x1, float x2)
we see that it has two formal parameters. The argument values will
be put in the two parameter variables x1 and x2,
which work as local variables but with the argument values as initial
values.
Execution will then continue with the body of the method. In this
case, the body is
{
return (x1 + x2) / 2;
}
The value of (x1 + x2) / 2 will be calculated, giving
20.0. This value is then returned to the point where the method
was called, and is used as the value of the method-call
expression.
Note that Pike uses "call by value". This means that Pike always
calculates the value of the arguments before calling a method, and
then it sends those values (or, more precisely: copies of those
values) to the called method. This means that in the example
average(1.0, average(2.0, 3.0))
Pike will first call average with the two values
2.0 and 3.0, and when average has returned the
value 2.5, it will send the two values 1.0 and
2.5 to average. This second call of average
will return 1.75, and this is the value of the entire
expression.