Kitayets писал(а):для Perl есть такой пример:
[
- Код: Выделить всё
$x =~ s/remove-//;
Пример-то есть, только это вообще-то не операция присваивания. Алсо, если и в паскале перебирается массив указателей, ничто не препятствует менять данные, на которые указывает подстановочная переменная; вписать новый адрес в саму подстановочную переменную - вот этот номер не пройдет.
В C++ foreach нету вообще. Контейнеры STL и их работа с итераторами, Qt и его макросные надстройки - это отдельная область, но, imho и там подход сохраняется. Опять же из-за того, что прогон в подавляющем большинстве случаев производится явно или неявно по массивам указателей - как то похоже на то, что действительно что-то похоже работает.
скалогрыз писал(а):есть мнение, что Kitayets, имел в виду.
Не, он именно имел ввиду то, что имел. Если с переменной цикла до ее использования в теле оператора цикла происходят какие-то действия по присваиванию ей, компилятор выдает специфическое сообщение. Это было еще на RT-11 pascal, на турбе, на дельфях. Парадигма формальная озвучена: по правилам языка переменная цикла for вне тела цикла
не определена. Возможно, на этот счет еще и какое-то RFC существует.
то есть, если сделать:
- Код: Выделить всё
procedure Test;
var
i: integer = 0;
j: integer;
begin
j:=i*i+200;
i:=j-1;
for i:=0 to 100 do
begin
write(i);
{do something}
end;
end;
begin
Test;
end.
...то компилятор imho выдаст ошибку.
И то же самое скорее всего будет, если i не объявлять типизированной константой. {{проверять лениво, етц}}