Result
рассматривается как неявный var
параметр для вашей функции.
Представьте себе, если вы записали это явно так:
procedure test(var result: string);
begin
result := result + 'a';
end;
for i := 1 to 10 do
test(s);
Тогда вы ожидаете, что этодобавьте к s
.
Тот факт, что вы выбрасываете Result
каждый раз, когда вызываете его, является причиной того, что компилятор иногда решает завершить его.Как указывает @gabr, он решает не завершать эту неявную переменную внутри цикла в качестве оптимизации.
Если бы вы присваивали результат test
строке каждый раз, когда вызывали test
, тогдавы бы увидели, что строка удлиняется каждый раз, она никогда не будет повторно инициализирована.
Вот почему вы всегда должны инициализировать переменную результата.Он выглядит как локальная переменная, но его лучше всего рассматривать как параметр var
.