Pass-By-Name Parameter Passing(收录)

来源:互联网 发布:玻璃优化排版软件下载 编辑:程序博客网 时间:2024/05/17 23:07

Rather than using pass-by-reference for input/output parameters, Algol used the more powerful mechanism of pass-by-name.

In essence, you can pass in the symbolic "name"; of a variable, which allows it both to be accessed and updated.

For example, to double the value of C[j], you can pass its name (not its value) into the following procedure.

procedure double(x);  real x;begin  x := x * 2end;

In general, the effect of pass-by-name is to textually substitute the argument expressions in a procedure call for the corresponding parameters in the body of the procedure, e.g., double(C[j]) is interpreted as C[j] := C[j] * 2.

Technically, if any of the variables in the called procedure clash with the caller's variables, they must be renamed uniquely before substitution.

Implications of the pass-by-name mechanism:

  1. The argument expression is re-evaluated each time the formal parameter is accessed.
  2. The procedure can change the values of variables used in the argument expression and hence change the expression's value.

http://www.cs.sfu.ca/~cameron/Teaching/383/PassByName.html
原创粉丝点击