プログラミング言語SML#解説 4.0.0版
24.1 ストラクチャ宣言 : strDecl
ストラクチャ宣言は,ストラクチャ名stridを,ストラクチャ 式strexp表すストラクチャに束縛する形の宣言である.
strDecl | := | structure strbind |
strbind | ::= | strid = strexp and strbind |
strid : sigexp = strexp and strbind | ||
strid :> sigexp = strexp and strbind |
andで繋がれた複数のストラクチャ名は,同時に束縛される. それら名前のスコープは,この宣言に続く部分である. 従って,以下の宣言では,yは2ではなく1に束縛される.
structure A = struct val a = 1 end;
structure B = struct val b = 1 end;
structure A = struct val a = 2 end and B = struct val b = A.a end;
val x = A.a;
val y = B.b;
シグネチャ制約付きのストラクチャ名束縛は,以下のシグネチャ制約付 きのストラクチャ式への束縛へと変換される.
変換前 | 変換後 |
---|---|
strid : sigexp = strexp | strid = strexp: sigexp |
strid :> sigexp = strexp | strid = strexp:> sigexp |
ストラクチャ宣言の評価は以下のように行われる.
-
1.
次節の定義に従い,ストラクチャ式を評価して静的型環境と実行 時環境を求める.
-
2.
静的環境と動的で束縛されたロング名をストラクチャ名で プレフィックスした環境とを求め現在の環境に追加する.
例えばストラクチャ宣言structure strid = strexpにおいて, ストラクチャ式strexpが生成する型環 境と実行時環境がおよび であれば,このストラクチャ宣言の効果は,現在の静的型環境および実行時環境に, および のロング名束縛が追加される.