首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何缩短IntoIterator<Item=MyComplexType>

如何缩短IntoIterator<Item=MyComplexType>
EN

Stack Overflow用户
提问于 2021-10-04 09:12:35
回答 2查看 46关注 0票数 1

典型的用例是

代码语言:javascript
复制
fn process_items(items: impl IntoIterator<Item=MyComplexType>) {...}

我想知道这能不能缩短到

代码语言:javascript
复制
fn process_items(items: impl ItemsIter) {...}

然而,

代码语言:javascript
复制
type ItemsIter = IntoIterator<Item=MyComplexType>

不工作和辅助特性

代码语言:javascript
复制
trait ItemsIter: IntoIterator<Item=MyComplexType> {}

需要一个全面的实现。有没有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-04 14:18:35

除了其他答案之外,请注意,创建"trait alias“的能力确实存在,但不稳定。如果你每晚都在使用不稳定的特性,你可以这样做。

代码语言:javascript
复制
#![feature(trait_alias)]

pub struct MyComplexType;

trait MyComplexIterator = IntoIterator<Item = MyComplexType>;

(Playground link)

票数 3
EN

Stack Overflow用户

发布于 2021-10-04 09:21:32

您可以为MyComplexType创建一个类型别名,并创建一个where子句来将绑定到函数参数列表之外的特征移出,例如

代码语言:javascript
复制
type MyAlias = MyComplexType;

fn process_items<I>(items: I)
where
    I: IntoIterator<Item = MyAlias>
{...}

如果您经常需要此特征绑定,您还可以创建一个具有所需特征绑定的自定义特征,并为其提供一个全面的实现:

代码语言:javascript
复制
trait MyIterator: IntoIterator<Item = MyComplexType> {}
impl<T: IntoIterator<Item = MyComplexType>> MyIterator for T {}

fn process_items(items: impl MyIterator) {...}

(您在问题中提到了这一点;我不认为这种方法有任何问题。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69433551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档