「動的スコープ」の版間の差分

削除された内容 追加された内容
編集の要約なし
編集の要約なし
3行目:
動的スコープは、[[静的スコープ]](構文構造のみから決定できるスコープ)に加え、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近い[[ブロック (プログラミング)|ブロック]]にある変数である。以下の疑似コードでは:
 
funcA()A {
var x;
}
funcB()B {
var x,y;
A; // このAはxを参照可
funcA();
}
funcC()C {
var x,zy;
A; // このAはxを参照不可
funcA();
}
* <code>funcB</code>内で見えるのは自己ブロック内の<code>x</code>、<code>y</code>である。
* <code>funcC</code>内で見えるのは自己ブロック内の<code>x</code>、<code>z</code>である。
* <code>funcA</code>を<code>funcB</code>から呼び出したときは自己ブロック内の<code>x</code>と<code>funcB</code>内の<code>y</code>である。
* <code>funcA</code>を<code>funcC</code>から呼び出したときは自己ブロック内の<code>x</code>と<code>funcC</code>内の<code>z</code>である。
 
このときブロック<code>funcAB</code>内で[[変数 (プから呼び出されたブグラミング)|変数]]ック<code>zA</code>を利用していてブロック<code>funcBB</code>(または他ので定義されている変数<code>zx</code>の見えない[[関数 (プを参照できる。ブグラミング)|関数]])ック<code>C</code>から呼び出されときブロック<code>A</code>エラーとな、ブロック<code>B</code>で定義されてい変数<code>x</code>は参照できない
 
動的スコープの代表的な言語は古典[[LISP]]や[[Emacs Lisp]]、[[LOGO]]、[[Perl]]のlocal変数など。