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
值。这将允许您传入任何可以转换为 String
的 Iterator
的内容(包括 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());
}
只是用我在 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());
}
我想测试一个以 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
值。这将允许您传入任何可以转换为 String
的 Iterator
的内容(包括 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());
}
只是用我在 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());
}