TYPE および範囲式

範囲式は、次の例に示すように、型付き変数によって、その型付き変数の型定義から継承されます。型付き変数の次元および要素の長さは、範囲式の現在の値によって決まります。

/* TYPE DEFINITION */
DECLARE CHARX(N,N) CHAR( LENGTH(STRING) ) BASED, 
   N FIXED BINARY(15),
   STRING CHAR(80) VARYING;
/* TYPED VARIABLE */
DECLARE ARRAY TYPE(CHARX) BASED;

配列を参照する際の範囲の評価は、基底付き変数の評価に適用される規則と同じ規則に従います。次の例では、CHARX とは異なるブロックで可変長配列が宣言されています。

/*--------------------------------------------------*/
START:      PROCEDURE;
   DECLARE CHARX(N,N) CHAR( LENGTH(STRING) ) BASED, 
      N FIXED BINARY(15),
      STRING CHAR(80) VARYING;
      .
      .
      .
/*--------------------------------------------------*/
NEXT: PROCEDURE;
   DECLARE ARRAY TYPE(CHARX) BASED, 
      N FIXED BINARY(15),
      STRING CHAR(80) VARYING;
      .
      .
      .
END NEXT;
 
/*--------------------------------------------------*/
      .
      .
      .
END START;
/*--------------------------------------------------*/ 

前記の例の場合、Open PL/I では、NEXT プロシージャの宣言を使用して ARRAY の範囲式が評価されます。TYPE 属性を使用して宣言されていない変数であっても、常に現在のブロック内にある宣言を使用して範囲式が評価されます(前記の例では、NEXT プロシージャで N および STRING を宣言しなかった場合、START プロシージャの変数宣言が使用されることになります)。

REFER オプションを型定義で使用する場合は、以下が適用されます。