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

马蒂亚斯·威默(Matthias Wimmer)

我正在尝试将数字解码为整数,并获得仅对此数字进行迭代的迭代器,或者如果不是数字,则获取一个空迭代器。我试图这样做:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(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`
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

Shepmaster

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>

的情况也是如此Result

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

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

也可以看看:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当无法复制T时,如何将Option <T>的列表转换为T的列表?

如何将Memory <T>转换为另一个

如何将`&T`转换为`T`?

如何将 TClass 转换为 T?

如何将 Vec<T> 转换为 HashMap<T,T>?

将Option <&T>转换为Option <T>

如何将Option [String]转换为Option [Int]?

根据输入序列的元素将IObservable <T>转换为另一个故障或完成的序列

如何将Optional <T>转换为Stream <T>?

Crystal如何将Array(T)转换为Array(T?)

如何将ICollection <T>转换为IReadOnlyCollection <T>?

RXJS如何将Observable <T []>转换为Observable <T>

如何将Vec <&mut T>转换为Vec <&T>?

如何将DStream [List [T]]转换为DStream [T]

如何将 RealmList<T> 转换为 RealmResults<T>

如何将列表中的一个元素转换为多个元素?

如何将 Observable<T> 的第一个元素添加到每个组?

如何将 2 个字节数组 (uint8_t) 转换为一个字 (uint16_t)?

如何在Rust中以最惯用的方式将Option <&T>转换为Option <T>?

如何以 Rust 中最惯用的方式将 Option<T> 转换为 Option<&T>?

将List <T>转换为包含另一个List <T>的另一个List <T>

在我的 PyTorch 训练迭代器中,如何解决 ValueError:只有一个元素张量可以转换为 Python 标量?

如何将一个元素字符串转换为char?

如何将Class <?>转换为Class <T>?

如何将 Void* 转换为 size_t?

如何将 List<T> 转换为特定类型

如何将任务转换为Task <T>?

如何将IEnumerable(无类型)转换为IQueryable <T>?

如何将字符串=“ \ t”转换为char