next up previous contents index
Next: 暗黙の型変換 Up: 変数 Previous: 通用範囲に関する規則

   
静的変数

  静的(static)変数は外部変数や自動変数に続く第3の記憶クラスである。 MATXにはC言語と異なり局所static変数のみ存在し,大域static変数は 存在しない。なぜなら,インタプリタにとって大域static変数を通常の 大域変数と区別することに意味がないからである。

static変数は自動変数と異なり,関数が起動される毎に初期化されることなく, ずっと存在し続ける。これは,static変数が関数内で私的な永久記憶をもつを ことを意味する。

static変数は0に初期化されることが保証されるので,ユーザが陽に初期化 する必要はない。リストは成分が0個のリストとして初期化される。


Func void afo()
{
  static Integer i;    // 0 に初期化される
  static Real r;       // 0.0 に初期化される
  static Complex c;    // (0,0) に初期化される
  static Polynomial P; // 0 に初期化される
  static Rational R;   // 0 に初期化される
  static List l;       // {} に初期化される

  i = i + 1;
  r = r + 1;
  c = c + (1,0);
  P = P + 1;
  R = R + 1;
  appendlist(l, 1);
}


ただし,行列は0 x 0の行列として初期化されるので, length()関数を用い大きさを調べるなどして,陽に初期化する必要がある。  


Func void afo()
{
  static Matrix A;

  if (length(A) == 0) {
    A = [1];
  } else {
    A = A + [1];
  }
}




Masanobu KOGA 平成10年8月19日