跨越 an_iterable 的埃菲尔铁塔 vs 原样
eiffel across an_iterable as vs is
我没有找到关于 is
和 as
之间区别的文档
我想实现一个类似于 this MAP 的迭代器,我想知道 return 使用 is
关键字和 as
一个.
- 我认为 是 将是
ITERATION_CURSOR [G]
class 的 item
- 是否为return一个
ITERATION_CURSOR [G]
,即ITERABLE[G]
的like {ITERABLE}.new_cursor
?
带有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
.
的快捷形式时则不可访问
我没有找到关于 is
和 as
我想实现一个类似于 this MAP 的迭代器,我想知道 return 使用 is
关键字和 as
一个.
- 我认为 是 将是
ITERATION_CURSOR [G]
class 的 - 是否为return一个
ITERATION_CURSOR [G]
,即ITERABLE[G]
的like {ITERABLE}.new_cursor
?
item
带有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
.