Причина ошибки E2064 при присваивании значения переменной в цикле for in
При использовании цикла for in в Delphi может возникнуть ошибка E2064 при попытке присвоить значение переменной, например, полю записи. Это происходит из-за того, что в цикле for in возвращается копия элемента массива или коллекции, а не сам элемент. Поэтому попытка изменить копию элемента приведет к ошибке, так как изменять копию бессмысленно.
Рассмотрим пример, который ilustrates данную проблему:
type
TParamSet = (param_A, param_B, param_C, param_D, param_E, param_F);
TParam = record
Edit: TEdit;
Value: Integer;
end;
var
dtcp: array[TParamSet] of TParam;
procedure ResetParams;
var
Param: TParam;
A: Integer;
begin
for Param in dtcp do
begin
Param.Edit.Text := 'Test'; // Нет проблем
A := Param.Value; // Нет проблем
Param.Value := 0; // Ошибка: E2064 Левая часть не может быть присвоена;
end;
end;
В данном примере attempting to assign a value to Param.Value в цикле for in вызывает ошибку E2064, так как Param является копией элемента массива dtcp, а не самим элементом. Изменять копию бессмысленно, поэтому компилятор выдает ошибку.
Решение проблемы
Чтобы решить данную проблему, можно использовать цикл for с индексом массива, как показано в следующем примере:
procedure ResetParams;
var
i: Integer;
begin
for i := low(dtcp) to high(dtcp) do
begin
dtcp[i].Value := 0; // Нет проблем
end;
end;
В данном примере мы используем цикл for с индексом массива dtcp, что позволяет напрямую изменять элементы массива.
Вывод
При использовании цикла for in в Delphi важно понимать, что возвращается копия элемента массива или коллекции, а не сам элемент. Attempting to change the copy will result in an E2064 compiler error. To avoid this, use a traditional for loop with the array index.
Ошибка E2064 в Delphi при присваивании значения переменной в цикле `for in` происходит из-за того, что возвращается копия элемента, а не сам элемент, что делает изменение бессмысленным и приводит к ошибке.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.