rust - 在 Rust 中读取字符串并将其解析为迭代器的函数

标签 rust

有没有一种方法可以编写如下所示的函数:

fn read_and_iter_u32_line<'a>(mut buf: String) -> Iterator<Item=u32> {
    buf.truncate(0);
    io::stdin().read_line(&mut buf).unwrap();
    buf.split_whitespace()
        .map(|s| s.parse::<u32>().unwrap())
}

最佳答案

迭代器是惰性的。这意味着它们正在操作的数据需要与迭代器本身一样存在,但是当函数返回时 buf 不再存在。如果我们将 buf 保留更长时间,它就可以正常工作。

目前编写返回复杂迭代器的函数很棘手,但这是可能的:

use std::io;
use std::iter::{Iterator, Map};
use std::str::SplitWhitespace;

fn read_and_iter_u32_line(buf: &mut String) -> Map<SplitWhitespace, fn(&str) -> u32> {
    buf.truncate(0);
    io::stdin().read_line(buf).unwrap();
    buf.split_whitespace().map(parse)
}

fn parse(s: &str) -> u32 {
    s.parse::<u32>().unwrap()
}

关于rust - 在 Rust 中读取字符串并将其解析为迭代器的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765248/

相关文章:

rust - new() 方法返回通用 'impl trait' 值

rust - 对发出的 LLVM IR 执行了哪些 LLVM 传递?

rust - 如何将 &[u8] 转换为 &[u8; 64]?

rust - 遍历中RefCell的循环引用借用

rust - 为什么 rustup 的 beta 版和 nightly 版是同一个版本?

rust - `usize` 和 `u32` 有什么区别?

enums - 如何返回特定索引处的枚举字符串?

rust - 无法移出借用的上下文

sqlite - 使用rust 柴油 : SQLite INSERT RETURNING multiple ids

rust - 有没有办法使用 bool 值作为枚举的基础类型?