動的スコープ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
動的スコープ、ダイナミックスコープ(dynamic scope)とは、プログラミング言語におけるスコープの一種。
変数の参照範囲が原則ブロックの内側である所までは静的スコープと同じだが、サブルーチンを呼び出すとき、サブルーチン側から呼び出し側のスコープを参照できるのが特徴である。原理的には、サブルーチン呼び出しの度にシンボル表がスタックに積まれるのに等しい。このとき利用されるのは最もブロック的に近い所にある変数である。以下の疑似コードでは:
funcA() { var x; } funcB() { var x,y; funcA(); } funcC() { var x,z; funcA(); }
funcB
内で見えるのは自己ブロック内のx
、y
である。funcC
内で見えるのは自己ブロック内のx
、z
である。funcA
をfuncB
から呼び出したときは自己ブロック内のx
とfuncB
内のy
である。funcA
をfuncC
から呼び出したときは自己ブロック内のx
とfuncC
内のz
である。
このときfuncA
内で変数z
を利用していて、funcB
(または他のz
の見えない関数)から呼び出したときはエラーとなる。
動的スコープの代表的な言語は古典LISPやEmacs Lisp、LOGO、Perlのlocal変数など。 動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。