В следующем коде я попытался использовать переменную поля (класса или записи) или элемент массива непосредственно в качестве счетчика цикла, но это было недопустимо ("ошибка: недопустимое выражение индекса"). Это просто потому, что счетчик циклов должен быть скалярной переменной?
class Cls {
var n: int;
}
proc main()
{
var x = new Cls( 100 );
var k: [1..10] int;
for x.n in 1..3 do // error: invalid index expression
writeln( x.n );
for k[1] in 1..3 do // error: invalid index expression
writeln( k[1] );
}
С другой стороны, если я создам ссылку на x.n
, она успешно скомпилируется, но x
во внешней области не будет изменена. Это потому, что в цикле for создается новая переменная цикла с именем n
? (который, я боюсь, почти такой же, как мой другой вопрос ...)
proc main()
{
var x = new Cls( 100 );
ref n = x.n;
for n in 1..3 do
writeln( n );
writeln( "x = ", x ); // x = {n = 100}
}
Если переменная цикла создается независимо, я предполагаю, что что-то вроде "var x.n =..." может произойти (внутри), если я напишу for x.n in 1..3
, что кажется действительно недействительным (потому что это означает, что я пытаюсь объявить переменную цикла с помощью имя x.n
).