rust - 如何将 Iterator<String> 作为 Iterator<&str> 传递?

标签 rust

fn my_print<'a>(args: impl Iterator<Item=&'a str>) {
    for arg in args {
        println!("=> {}", arg);
    }
}

fn main() {
    let vec = vec!["one".to_string(), "two".to_string()];
    my_print(vec.into_iter()); // how to pass vec here?
}

如何转换 Iterator<T>Iterator<U>并将其传递给另一个函数?

最佳答案

更好的方法是在 a way such as it doesn't actually care 中编写函数:

fn my_print<T: AsRef<str>>(args: impl Iterator<Item = T>) {
    for arg in args {
        println!("=> {}", arg.as_ref());
    }
}

fn main() {
    let vec = vec!["one".to_string(), "two".to_string()];
    my_print(vec.into_iter()); // works!
}

如果您无法更改函数签名,you have to convert the iterator beforehand :

fn my_print<'a>(args: impl Iterator<Item = &'a str>) {
    for arg in args {
        println!("=> {}", arg);
    }
}

fn main() {
    let vec = vec!["one".to_string(), "two".to_string()];
    my_print(vec.iter().map(|s| s.as_ref()));
}

请注意,在这种情况下,您不能使用 into_iter,因为没有人会拥有这些字符串。

关于rust - 如何将 Iterator<String> 作为 Iterator<&str> 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55948343/

相关文章:

multidimensional-array - 如何在不复制的情况下将 ndarray::ArrayView 转换为 &ndarray::Array?

generics - 如何在Rust中没有特征对象的特征的多个实现者之间进行选择?

rust - 从 Option<&str> 到 Option<String> 的转换

debugging - 在 Rust 中调试时执行语句

multithreading - 如何从函数返回 JoinHandle?

debugging - 如何在 Rust 中打印表达式及其值?

rust - 函数引用 : expected bound lifetime parameter , 找到了具体的生命周期 [E0271]

iterator - 如何实现赋予结构生命周期的迭代器?

函数参数报告 "error expected pattern, found keyword ` mod`"

rust - 如何复制/克隆既不派生的结构?