跨越 an_iterable 的埃菲尔铁塔 vs 原样

eiffel across an_iterable as vs is

我没有找到关于 isas

之间区别的文档

我想实现一个类似于 this MAP 的迭代器,我想知道 return 使用 is 关键字和 as一个.

带有is的版本是当循环光标上调用的唯一功能是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

实际上,the type of the cursor is derived 来自对执行迭代的对象调用的查询类型 new_cursor。但是,此游标类型中可用的任何其他功能仅在使用带有 as 的循环的完整迭代形式时才可用,而在使用带有 is.

的快捷形式时则不可访问