26 Scope of variables

gnuplot の変数は、以下に示す特別な場合を除いては大域的 (global) です。 有効な変数に対しては、その名前で区別された、永続的な一覧表があります。 変数の割り当てとは、その一覧表に項目を一つ作るか、置き換えることを意味 します。その一覧表から変数を削除する唯一の方法は、コマンド undefine を使用することです。

例外 1: 繰り返し指定の中で使用される変数の有効範囲 (スコープ) は、その 繰り返しの中だけです。繰り返し変数の値を、その実行ブロック内で永続的に 変更することはできません。繰り返し変数が繰り返しの前に値を持っていたと したら、その値は繰り返しの終了時に保持、または復帰されます。 例えば、以下のコマンドは、1 2 3 4 5 6 7 8 9 10 A を出力します。


    i = "A"
    do for [i=1:10] { print i; i=10; }
    print i

例外 2: 関数定義で使用されるパラメータの名前は、その関数を呼び出すとき に与える実際の値の置き場所に過ぎません。例えば、以下の例では、x と y の現在、あるいは未来の値はここで示される定義には関係しないが、A はこの 関数が後で評価されるときには大域変数として存在しなければいけません:


    func(x,y) = A + (x+y)/2.

例外 3: コマンド local で宣言された変数。 local 指定 (バージョン 6 での新機能) は、変数、または配列のオプショ ン的な宣言を可能にし、それによりそれが見つかるコードブロック内部にその 有効範囲を制限するものです。このコードブロックとは、loadcall の対象、関数ブロックの評価、そして条件 if, else, do for, while の後に続く中括弧内のコードです。 局所 (local) 変数の名前が大域 (global) 変数と重なった場合、その局所変 数の有効範囲から抜けるまでは、大域変数は隠されます。
試験段階: 現在実装されている局所変数の有効範囲は、それが宣言されたコー ドブロックから呼び出される関数内にも延長されます。これは、call, load, 関数ブロック呼び出しでも同じです。 これは、将来は変更され、その有効範囲はそれを宣言しているコードブロック に厳密に制限されるようになるでしょう。

竹野茂治@新潟工科大学
2024-05-31