Rust 我如何手动创建一个 std::env::Args 迭代器进行测试

Rust how do I create manually an std::env::Args iterator for testing

我想测试一个以 std::env::Args 迭代器作为参数但不使用命令行并为参数提供 Vec:

的函数
use std::env;

fn main() {
    let v = vec!["hello".to_string(), "world".to_string()];
    print_iterator(env::args()); // with the command line
    print_iterator( ??? ); // how should I do with v?
}

fn print_iterator(mut args: env::Args) {
    println!("{:?}", args.next());
    println!("{:?}", args.next());
}

让你的函数是通用的,并采用任何实现 IntoIterator 的项目是 String 值。这将允许您传入任何可以转换为 StringIterator 的内容(包括 Iterator 本身)。

此特性由 Args(本身实现 Iterator)和 Vec<String>.

实现
fn print_iterator(args: impl IntoIterator<Item=String>) {
    let mut iter = args.into_iter();
    println!("{:?}", iter.next());
    println!("{:?}", iter.next());
}

(Playground)

只是用我在 Rust 书中看到的格式重写了@cdhowie 的解决方案。不确定这是否更地道。

fn print_iterator<T>(args: T) 
    where T: IntoIterator<Item=String> {
    let mut iter = args.into_iter();
    println!("{:?}", iter.next());
    println!("{:?}", iter.next());
}