为什么列表包装在IntoIter中?

互斥量

在这本书中学习锈就太多了链表,在执行IntoIter,为什么List包裹在一个元组结构?相反,Iterator可能已经针对实施了List

克里斯·爱默生

是的,在这种情况下Iterator可以从技术上实现List通常情况并非如此,因为迭代器可能需要基本容器中不存在的其他状态(例如,Vec迭代器可能需要存储指向下一项的索引才能有效地进行迭代)。

原因之一是,如果将来对实现进行更改,并且List迭代器具有附加状态会更好,那么可以更改迭代器结构而无需更改任何调用程序。

另一个原因是,在Rust中,通常使用类型来缩小接口的范围,以减少出错的机会。如果Iterator直接实现(大概IntoIterator返回self),那么用户List就有可能在迭代过程中调用其他方法,这可能是错误的。相反,迭代器是一个单独的类型,这意味着在迭代过程中不可能有人将项目推入。(请注意,for由于存在借用/移动规则,因此循环中还是很难做到这一点,但总的来说仍然存在)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么要在未检查的异常中将检查的异常包装在lambda中?

当包装在通用函数中时,为什么此代码不起作用?

为什么不将每个块都包装在“ try”-“ catch”中?

为什么Contains()返回false但包装在列表中,而Intersect()返回true?

为什么不能将T *包装在std :: vector <T>中?

为什么将静态构造函数中的异常包装在TypeInitializationException中

Firefox为什么不接受包装在pre中的代码标签的CSS字体大小?

在Boost.Spirit中,为什么矢量(包装在结构中)而不是变体需要融合包装器?

为什么我必须将console.error包装在lambda中?

为什么需要将intl.Message包装在一个封闭函数中?

为什么Typescript认为async / await返回包装在promise中的值?

将ScrollView包装在React Native中的对象列表周围

为什么将事件分配包装在异步匿名函数中?

如何允许卡片包装在列表组中?

为什么在反应中调用包装在调度内部的动作函数?

为什么只有包装在对象中的Type []才能序列化?

为什么该网站返回包装在jQuery标签中的自动完成数据?

为什么将JSON响应包装在“ _jqjsp”外部元素中?

为什么在HTML中允许不将按钮包装在SCRIPT标签中而使按钮调用函数?

为什么parseJSON将我的JavaScript对象包装在一个新对象中?

如何将列表项包装在link_to中?

如果将它包装在def()调用中,为什么此python函数不起作用?

ReactJS将文本节点的每个字母包装在单独的跨度中。为什么?

为什么将其包装在一个函数中要花10倍的时间才能运行?

将每个元素包装在单独的ul列表中

将 SQL Server 列名称包装在列表中

为什么我需要将列表项包装在 Column 中才能使用按钮动态添加项到 ListView Flutter?

Ruby:为什么传递给 send() 的输入被包装在 Hash 中?

为什么 POODR 书建议“将默认值包装在方法中”?