如何为接收impl返回类型函数结果的变量显式指定类型?
解决Rust中
impl Iterator返回值的显式类型标注问题 你有两种方式可以为变量显式指定正确类型,匹配count_to_n的返回值:
1. 使用不透明类型标注(推荐)
直接用函数返回的impl Iterator<Item=usize>作为变量类型,这和Rust自动推导的行为完全一致,属于静态分发,不会有 trait 对象的性能开销:
{ fn count_to_n(n: usize) -> impl Iterator<Item=usize> { 0..n } let _i: impl Iterator<Item=usize> = count_to_n(10); // 正常运行 }
2. 使用具体的迭代器类型
如果明确知道函数内部返回的迭代器具体类型(这里是std::ops::Range<usize>),可以直接写这个具体类型:
{ fn count_to_n(n: usize) -> impl Iterator<Item=usize> { 0..n } let _i: std::ops::Range<usize> = count_to_n(10); // 正常运行 }
这种方式的缺点是耦合了函数内部的实现细节,如果后续修改count_to_n返回其他迭代器类型(比如std::iter::Skip<Range<usize>>),这里的类型标注就会报错。
内容的提问来源于stack exchange,提问作者Frank Schwidom
相关产品推荐
相关产品推荐

