只是試圖在ObjectPascal/Delphi中實現C/C++靜態局部變量的類似功能。 讓我們在C下面的函數:真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部分。它對那個單位是私人的,因此對那個職能是私人的。我甚至想到我想要這樣做的時候很難,而不是使用具有私人領域的對象。 –