2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2015 年 4 月 19 日
0.1.0 2015 年 4 月 19 日

#zipping 中排名 3

每月下载 45

MIT 许可证 MIT

3KB

zipWith.rs

标准库在 std::iter 模块中提供了几种迭代集合的方案。其中包含 ZipMap 迭代器,但是没有 ZipWith

看起来你应该能够非常简单地实现一个 zip_with 函数,例如这样

fn zipWith<R, U: Iterator, C: Fn(U::Item, U::Item) -> R> (combo: C, left: U, right: U) -> ??? {
   left.zip(right).map(| (l, r) | combo(l, r))
}

但是,返回类型应该是什么?在 Rust 中抽象返回类型到来之前,我们无法返回 impl Iterator<R>,我们只能返回一个具体实现的迭代器 -- 在这种情况下,我们会返回一个 Map

我认为这很丑!类型应该传达函数的意图,而 zip_with 的意图(不仅是)返回 Map

因此,这个库公开了一个名为 ZipWith 的结构,它包含两个迭代器和用于组合元素的闭包,以及一个名为 IntoZipWith 的特质(在 std::iter::IntoIterator 的意义上)来公开 zip_with 函数。

你可以这样使用它 像这样

use zipWith::IntoZipWith;
use std::iter::Iterator;

#[test]
fn zipping_two_lists_of_numbers_with_plus_returns_their_sum () {
    let left: Vec<u8> = vec![1, 2, 3];
    let right: Vec<u8> = vec![4, 5, 6];

    let result: Vec<u8> = left.zip_with(right, | l, r | l + r).collect();

    assert_eq!(vec![5, 7, 9], result);
}

无运行时依赖