eiffel через an_iterable как vs есть - PullRequest
1 голос
/ 18 июня 2020

Я не нашел документации о разнице между is и as

Я бы хотел реализовать итератор, похожий на this MAP , я бы хотел бы знать, какой ТИП возвращается с ключевым словом is и с ключевым словом as.

  • Я думаю, что is будет item из ITERATION_CURSOR [G] class
  • Возвращает ли as ITERATION_CURSOR [G], которое будет like {ITERABLE}.new_cursor из ITERABLE[G]?

1 Ответ

2 голосов
/ 19 июня 2020

Версия с is - это ярлык, когда единственная функция, вызываемая курсором l oop, - item. Ярлык устраняет необходимость явно вызывать запрос. Таким образом, следующие две версии семантически эквивалентны:

across foo as x loop ... x.item ... end
across foo is x loop ... x ... end

Другими словами, вторая версия может отображаться как автоматически переведенная в

across foo as _x loop ... _x.item ... end

, где _x недоступен, а x означает _x.item.

Тип x в первой версии - ITERATION_CURSOR [G]. Во второй версии это тип {ITERATION_CURSOR [G]}.item, т.е. G.

Фактически, тип курсора является производным от типа запроса new_cursor, вызываемого на объекте, на котором выполняется итерация. Однако любые дополнительные функции, доступные в этом типе курсора, доступны только при использовании полной итерационной формы al oop с as и недоступны при использовании формы быстрого доступа с is.

...