2年前の雑談で以下のような事を書きましたが、
[使い所が難しい Delphi の関数 ]
http://ht-deko.minim.ne.jp/ft1105.html#110514
よくよく (じゃなくても) 考えてみれば、Succ と Pred は順序型に対して使えるのですよね。例えば、遷移状態を表す列挙型があったとします。
type TSequence = (seqFirst, seqSecond, seqThird);
seqFirst から seqSecond へ遷移したい場合、
function TForm1.NextSequence(Sequence: TSequence): TSequence; begin result := Sequence + 1; end;
これは "E2008 互換性の無い型です" で怒られちゃいます。
function TForm1.NextSequence(Sequence: TSequence): TSequence; begin result := TSequence(Integer(Sequence) + 1); end;
キャストすると冗長なコードになりますね。Succ を使えば簡潔に書けます。
function TForm1.NextSequence(Sequence: TSequence): TSequence; begin result := Succ(Sequence); end;
列挙型の変数の値を書き換えるのであれば、Inc / Dec が使えるのですが。
type TForm1 = class(TForm) private { Private 宣言 } FSequence: TSequence; procedure NextSequence; ...
procedure TForm1.NextSequence; begin Inc(FSequence); end;
# 駄文で申し訳ない。
|