В этом конкретном случае, когда вы знаете, что tempK
равно 1
, подойдет tempI := 1
.
Если идея состоит в том, чтобы инициализировать tempI
, как только значения, хранящиеся в списке, имеют тип INTEGER
, есть несколько способов. Один из них - использовать объектный тест:
if attached {INTEGER} tempK as i then
tempI := i
end
Однако в этом случае проверка проводится для каждого элемента, т.е. неэффективна. Изменение кода для проверки типа списка перед циклом поможет:
if attached {LINKED_LIST [INTEGER]} keys as integer_keys then
...
across
integer_keys as cursor
loop
tempI := cursor.item
end
...
end
Если единственной операцией в цикле является присваивание, эквивалентный код должен взять только последний элемент списка:
...
if not keys.is_empty and then attached {LINKED_LIST [INTEGER]} keys as integer_keys then
tempI := integer_keys.last
end
...
Вместо специализации код также можно обобщить, чтобы взять универсальный агент, которому будет передан ключ, а клиент предоставит процедуру для обработки ключа. Но этого может быть слишком много, в зависимости от цели решаемой вами задачи.
person
Alexander Kogtenkov
schedule
27.10.2017