Как переместить связанный список в моем использовании посткодирования через цикл в Eiffel?
Я пытаюсь использовать через 1|..|list.count как j all list.i_th(z) ~ old list.i_th(z) end
но это говорит неизвестный идентификатор z. Что не так с этим синтаксисом??
1 ответ
Синтаксис правильный. Тем не менее, нет идентификатора имени z
объявляется, следовательно ошибка. Есть переменная курсора j
вместо. К элементам в текущей позиции курсора обращаются с помощью j.item
,
Другая проблема заключается в том, что j
оценивается в текущем контексте (постусловии), но старые выражения оцениваются до выполнения тела объекта, где j
отсутствует. В результате код с old list.i_th (j.item)
не будет компилироваться. Другими словами, значение должно быть взято из старого списка, но с текущим индексом. Выражение (old list).i_th (j.item)
делает трюк.
Но это все равно не делает то, что нужно. Оказывается, что old list = list
потому что ссылка на объект списка остается прежней. Чтобы получить старые элементы, вместо этого требуется копия списка: (old list.twin)
,
Сочетая все вышесказанное, выражение должно выглядеть так across 1 |..| list.count as j all list.i_th (j.item) ~ (old list.twin).i_th (j.item) end
,