Форум: "Начинающим";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];
ВнизУказатели Найти похожие ветки
← →
aka © (2016-04-07 10:13) [0]Пришлось править чужой исходник.
Кратко суть проблемыNext := First;
while Next <> Last do begin
{143 строки кода разных действий с Next}
Next := Next.Child[DLeft]
end;
Last - тут естественно под while не попадает (в этом и был скрытый баг)
получается что нужно брать Last и дописывать для него отдельно после while все то что было в теле цикла для Next.
← →
Ринсвинд © (2016-04-07 11:55) [1]
Next := First;
while true do begin
{143 строки кода разных действий с Next}
if Next = Last then
break;
Next := Next.Child[DLeft]
end;
← →
Ринсвинд © (2016-04-07 12:00) [2]Разумеется, при условии что Next не присваивается новый объект в тех 143 строчках кода.
← →
Игорь Шевченко © (2016-04-07 13:43) [3]repeat...until
← →
han_malign © (2016-04-07 15:43) [4]
> получается что нужно брать Last и дописывать для него отдельно
- почувствуй силу декомпозиции, Люк...Next := First;
while Next <> Last do begin
process(Next);
Next := Next.Child[DLeft]
end;
process(Last);
← →
Германн © (2016-04-08 01:46) [5]
> han_malign © (07.04.16 15:43) [4]
>
>
> > получается что нужно брать Last и дописывать для него
> отдельно
>
> - почувствуй силу декомпозиции, Люк...
Это шутка такая что ли?
← →
sniknik © (2016-04-08 08:46) [6]> Это шутка такая что ли?
?
загнать в процедуру 143 строчки кода, и вызвать ее 2 раза? нет не шутка. нормальное решение.
хотя я бы сделал так, при условии что Last.Child[DLeft] возвращает nil, а оно вроде так и делается в указателях/списках из них, "концевики" инициализируются nil-ом.
тогда очевидно, и без лишних условий/процедур.Next := First;
while Assigned(Next) do begin
{143 строки кода разных действий с Next}
Next := Next.Child[DLeft]
end;
и да, First на пустой структуре тоже nil должен возвращать.
← →
han_malign © (2016-04-08 16:08) [7]
> Это шутка такая что ли?
- а еще лучше
process(Next.value);
- чтобы гарантировать семантическую изоляцию работы с данными от реализации контейнера...
и тогда коментарий будет выглядеть:
{пофиг сколько там строк кода, т.к манипуляций с Next не происходит}
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c