ObjectPascal/DelphiのC/C++静的ローカル変数と同様の機能を実現しようとしています。 のは、Cに次の機能を持ってみましょう:True C静的ローカル変数置換?
bool update_position(int x, int y)
{
static int dx = pow(-1.0, rand() % 2);
static int dy = pow(-1.0, rand() % 2);
if (x+dx < 0 || x+dx > 640)
dx = -dx;
...
move_object(x+dx, y+dy);
...
}
静的変数置き換えがコンパイルに失敗したとして、入力された定数を使用して等価ObjectPascalとコード:
function UpdatePosition(x,y: Integer): Boolean;
const
dx: Integer = Trunc(Power(-1, Random(2))); // error E2026
dy: Integer = Trunc(Power(-1, Random(2)));
begin
if (x+dx < 0) or (x+dx > 640) then
dx := -dx;
...
MoveObject(x+dx, y+dy);
...
end;
[DCCのエラー] test_f.pas(332): E2026定数式は、そうローカル変数を初期化したワンタイムパスのためのいくつかの方法がある
を期待しましたか?
より賢明なオプションは、あなたの関数独自の単位を与えること、そしてそのユニットの実装するvarセクションにグローバルを宣言する可能性があります。それは、そのユニットにとってプライベートなので、その機能にはプライベートです。私は、プライベートフィールドを持つオブジェクトを使用するのではなく、これをやりたいと思っていた時代を考えても苦労します。 –