首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Option<T>转换为零或一个元素的迭代器?

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

Stack Overflow用户
提问于 2018-08-02 22:01:33
回答 1查看 1.4K关注 0票数 3

我试图将一个数字解码成一个整数,或者在这个数字上得到一个迭代器,或者如果它不是一个数字的话,得到一个空的迭代器。我试过这样做:

代码语言:javascript
复制
let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())

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

代码语言:javascript
复制
error[E0308]: mismatched types
 --> src/lib.rs:6:41
  |
6 |     ch.to_digit(10).map(once).unwrap_or(empty());
  |                                         ^^^^^^^ expected struct `std::iter::Once`, found struct `std::iter::Empty`
error[E0308]: mismatched types
 --> src/lib.rs:6:41
  |
6 |     ch.to_digit(10).map(once).unwrap_or(empty());
  |                                         ^^^^^^^ expected struct `std::iter::Once`, found struct `std::iter::Empty`
  |
  |
  = note: expected type `std::iter::Once<u32>`
             found type `std::iter::Empty<_>`

  = note: expected type `std::iter::Once<u32>`
             found type `std::iter::Empty<_>`

我可以告诉.unwrap_or(...),我不关心实际的类型,只是我会得到一个Iterator的实现

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 12:22:35

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

转换成一个迭代器。 通过为类型实现IntoIterator,可以定义如何将其转换为迭代器。这对于描述某种类型的集合的类型来说是常见的。 实现IntoIterator的一个好处是您的类型将使用Rust的for循环语法。如何将Option<T>转换为零或一个元素的迭代器?

Option实现IntoIterator

代码语言:javascript
复制
impl<'a, T> IntoIterator for &'a mut Option<T>
impl<T> IntoIterator for Option<T>
impl<'a, T> IntoIterator for &'a Option<T>

Result也是如此。

您所需要做的就是调用into_iter (或者在一个像for循环一样调用IntoIterator的地方使用这个值):

代码语言:javascript
复制
fn x() -> impl Iterator<Item = u32> {
    let ch = '1';
    ch.to_digit(10).into_iter()
}

另请参阅:

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

https://stackoverflow.com/questions/51662730

复制
相关文章

相似问题

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