1 个不稳定版本
0.1.0 | 2024 年 4 月 30 日 |
---|
#863 in Rust 模式
用于 sigmut
295KB
7.5K SLoC
iter-n
一个用于返回 impl Iterator 的函数返回多种不同类型的实用工具。
动机
在返回 impl Iterator
的函数中,需要返回特定类型的迭代器。因此,无法返回不同类型的迭代器,如下所示。
fn f(x: i32) -> impl Iterator<Item = i32> {
if x % 2 == 0 {
[0, 1].iter().map(|y| y + 1)
} else {
[0, 1].iter().map(|y| y + 2) // ERROR: `if` and `else` have incompatible types
}
}
通过使用 iter_n
,您可以从函数中返回不同类型的迭代器。
示例
use iter_n::iter2::*
必须放置在函数作用域中,而不是模块作用域中。
由于 iter_n::iter2
、iter_n::iter3
等,定义了相同名称的方法,如果模块作用域中放置了多个 use iter_n::iter{N}::*;
,将会有方法冲突。
fn f(x: i32) -> impl Iterator<Item = i32> {
use iter_n::iter2::*;
if x % 2 == 0 {
[0, 1].iter().map(|y| y + 1).into_iter0()
} else {
[0, 1].iter().map(|y| y + 2).into_iter1()
}
}
fn g(x: i32) -> impl Iterator<Item = i32> {
use iter_n::iter3::*;
if x % 3 == 0 {
[0, 1].iter().map(|y| y + 1).into_iter0()
} else if x % 3 == 0 {
[0, 1].iter().map(|y| y + 2).into_iter1()
} else {
[0, 1].iter().map(|y| y + 3).into_iter2()
}
}
许可证
该项目采用 Apache-2.0/MIT 双重许可。请参阅两个 LICENSE-* 文件以获取详细信息。
贡献
除非您明确表示,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,将被双重许可,如上所述,无需任何附加条款或条件。