てきとう

てきとう

Gem #2

http://www.adacore.com/2007/05/21/gem-2/

「aggregateで型の既定値使えるようにしたよ!」

#1の例で相変わらずZはエラーですが、Bの初期値として<>を与えることで、

X:T; -- 正しい。X.A=42, X.B='@'
Y:T := (A=>99, B=>'0'); -- 正しい。 X.A=99, X.B='0'
Z:T := (A=>64, B=> <>); -- 正しい。 X.A=64, X.B='@'

T宣言時の初期値を使うことができます。
元記事の最後に触れられている注意は、型宣言で既定値が設定されていないスカラ値は(当然)不定ということです。*1
以下のような場合Wの要素は不定です

   type U is array(1..5) of Character;
   type V is array(1..5) of S;
   W:V:=(others=> (others=> <>));

が、表記上初期化されているので単に初期化されていない場合に通常出る警告が出ません。(少なくともウチのGNAT 4.4.1では)

*1:2012でスカラも既定値の設定できるようになるらしい