如何将 Option<T> 转换为零个或一个元素的迭代器?

Mat*_*mer 5 traits rust

我正在尝试将数字解码为整数,并且要么获取该数字的迭代器,要么获取空迭代器(如果它不是数字)。我尝试这样做:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
Run Code Online (Sandbox Code Playgroud)

这不能编译。我收到以下错误消息:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
Run Code Online (Sandbox Code Playgroud)

我有什么方法可以告诉我.unwrap_or(...),我不关心实际类型,但我会得到一个实现Iterator

She*_*ter 3

IntoIterator特征的存在只是为了能够将类型转换为迭代器:

转换为迭代器。

通过实现IntoIterator类型,您可以定义如何将其转换为迭代器。这对于描述某种集合的类型很常见。

实现的好处之一IntoIterator是您的类型将使用 Rust 的 for 循环语法

如何将 an 转换Option<T> 为零或一个元素的迭代器?

Option实现IntoIterator

impl<'a, T> IntoIterator for &'a mut Option<T>
impl<T> IntoIterator for Option<T>
impl<'a, T> IntoIterator for &'a Option<T>
Run Code Online (Sandbox Code Playgroud)

对于 也是如此Result

您需要做的就是调用(或在像循环一样into_iter调用的地方使用该值):IntoIteratorfor

fn x() -> impl Iterator<Item = u32> {
    let ch = '1';
    ch.to_digit(10).into_iter()
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: