【问题标题】:eiffel across an_iterable as vs is埃菲尔横跨 an_iterable as vs is
【发布时间】:2020-10-08 19:17:07
【问题描述】:

我没有找到关于isas 之间区别的文档

我想实现一个类似于this MAP 的迭代器,我想知道is 关键字和as 返回的类型。

  • 我认为将是ITERATION_CURSOR [G]类的item
  • as 是否返回 ITERATION_CURSOR [G],即 like {ITERABLE}.new_cursor of ITERABLE[G]

【问题讨论】:

    标签: loops iterator iteration eiffel


    【解决方案1】:

    当循环光标上调用的唯一功能是item 时,带有is 的版本是一个快捷方式。该快捷方式无需显式调用查询。所以,以下两个版本在语义上是等价的:

    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_cursorthe type of the cursor is derived 调用了对其执行迭代的对象。但是,此游标类型中可用的任何附加功能只有在使用带有as 的循环的完整迭代形式时才能访问,而在使用带有is 的快捷形式时是不可访问的。

    【讨论】:

    • 很多,但是有效的TYPEnew_cursor功能从ITERABLE继承时返回的类型不是吗?
    • @Pipo 是的,我添加了一段提到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多