Rust 如何转换期权<;T>;到一个元素为零的迭代器还是一个元素的迭代器?
我试着把一个数字解码成一个整数,或者在这个数字上得到一个迭代器,或者如果它不是一个数字,得到一个空迭代器。我试着这样做:Rust 如何转换期权<;T>;到一个元素为零的迭代器还是一个元素的迭代器?,rust,traits,Rust,Traits,我试着把一个数字解码成一个整数,或者在这个数字上得到一个迭代器,或者如果它不是一个数字,得到一个空迭代器。我试着这样做: let ch = '1'; ch.to_digit(10).map(once).unwrap_or(empty()) 这不能编译。我收到以下错误消息: 错误[E0308]:类型不匹配 -->src/lib.rs:6:41 | 6位数字(10)。映射(一次)。展开或(空()); |^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Emp
let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
这不能编译。我收到以下错误消息:
错误[E0308]:类型不匹配
-->src/lib.rs:6:41
|
6位数字(10)。映射(一次)。展开或(空());
|^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Empty'`
错误[E0308]:类型不匹配
-->src/lib.rs:6:41
|
6位数字(10)。映射(一次)。展开或(空());
|^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Empty'`
|
|
=注意:应为'std::iter::Once'类型`
找到类型“std::iter::Empty”`
=注意:应为'std::iter::Once'类型`
找到类型“std::iter::Empty”`
我有没有办法告诉.unwrap_或(…)
我不关心实际的类型,只是我会得到一个迭代器的实现?这个特性的存在仅仅是为了能够将类型转换成迭代器:
转换为迭代器
通过为类型实现IntoIterator
,可以定义如何将其转换为迭代器。这对于描述某种集合的类型来说很常见
将实现到迭代器中的一个好处是,您的类型将
如何将选项
转换为零或一个元素的迭代器
选项
实现到迭代器
:
impl<'a, T> IntoIterator for &'a mut Option<T>
impl<T> IntoIterator for Option<T>
impl<'a, T> IntoIterator for &'a Option<T>
另见:
我相信您的问题已经得到了和的回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;DR the duplicates:否。或者。我不认为我的问题是的重复,因为我的问题与函数的返回类型无关。我将检查是否有帮助。谢谢。我想我实际上问的是如何将选项
转换为包含值(如果有的话)上的迭代器。这正是std::option::option
上的.iter()。所以我可能会删除这个问题,因为答案在rust文档中。你觉得呢?如果你相信有一天有人会和你有同样的问题,你也可以回答你自己的问题
fn x() -> impl Iterator<Item = u32> {
let ch = '1';
ch.to_digit(10).into_iter()
}