Erlangの変数スコープについて
はじめに
Erlangの変数のスコープについて、erlang.orgの和訳をする。
元は、http://www.erlang.org/course/advanced.html
変数のスコープ
Erlangの変数XやYは、始めに束縛される場所から、最後に参照されている場所までである。
以下、ErlangのHPの例から説明する。
f( X ) -> --- 1 変数Xは【束縛】される(★スコープ内★) Y = g( X ), --- 2 変数Xは【参照】される(★スコープ内★) h( Y, X ), --- 3 変数Xは【参照】される(★スコープ内★) p( Y ), --- 4 以下、変数Xは利用されない(スコープ外) f( 12 ). --- 5 (スコープ外)
ポイントは、束縛後、メソッド内終わりまでスコープ内とならないところ。
4行目では、もう参照することができないのである。
ここでは、変数Xに使用されている領域(メモリ)は、再利用のための領域となる。
それは、以下の原文から読み取れる。
line 1 - the variable X is defined (i.e. it becomes bound when the function is entered). line 2 - X is used, Y is defined (first occurrence). line 3 - X and Y are used. line 4 - Y is used. The space used by the system for storing X can be reclaimed. line 5 - the space used for Y can be reclaimed.
if/case/receive の変数のスコープ
条件分岐での変数スコープについて、説明する。
以下のメソッドで説明する。
f( X ) -> case g( X ) of true -> A = h( X ), B = 7; --- 1 false -> B = 6 --- 2 end, ..., h( A ), --- 3 ...
1の分岐が処理された場合、変数A、Bが束縛される。
2の分岐が処理された場合、変数Bが束縛される。
2の分岐が処理された場合、変数Aは束縛(定義)されていないので、
3は呼び出し失敗する。
ポイントは、分岐毎に束縛される変数が異なること。