eiffel: поперечная структура перемещает курсор текущей итерируемой структуры? - PullRequest
0 голосов
/ 26 января 2019

Мне было интересно, использует ли поперечная структура собственный курсор или отдельный?он гарантирует, что курсор не сместился, и если да, то как его можно выразить для других примеров?

1 Ответ

0 голосов
/ 26 января 2019

ITERABLE использует так называемые внешние курсоры, а не внутренние, объединенные с базовой структурой. В результате итерация не влияет ни на структуру, ни на любой другой курсор, созданный таким же образом. Это важно для поддержки вложенных или рекурсивных итераций. Например, чтобы найти дубликаты, можно сделать следующее:

across structure as i loop
    across structure as j loop
        if i.item = j.item then print ("Duplicates found.") end
    end
end

То же самое с внутренними курсорами, например ( примечание: код неверный )

from structure.start until structure.after loop
    x := structure.item
    from structure.start until structure.after loop
        if x = structure.item then print ("Duplicates found.") end
        structure.forth
    end
    structure.forth
end

не работает, потому что внутренний цикл также меняет курсор внешнего цикла.

Ограничение курсоров, связанных с ITERABLE, заключается в том, что связанная структура не должна изменяться в течение всего хода итерации. Это не теоретическое ограничение, а практическое ограничение для упрощения реализации и повышения его эффективности.

...