Rust函数返回HashMap类型报错:类型不匹配问题咨询
解决Rust读取meminfo生成HashMap的类型不匹配问题
原代码的问题分析
1. 核心逻辑错误
你的代码用["name", "value"]这个仅包含两个元素的数组,和file.lines()做zip操作,这会导致最终的HashMap最多只有两个键值对,完全不符合Linux meminfo文件每行对应一个内存指标键值的格式(比如MemTotal: 16777216 kB)。
2. 类型不匹配错误
报错的直接原因是:数组中的元素是&str类型,而函数返回值要求的是HashMap<String, String>,键的类型不匹配(&str vs String)。
修正后的代码
use std::collections::HashMap; use std::fs::File; use std::io::{BufRead, BufReader}; use std::path::Path; fn read_file_to_hashmap(file_name: impl AsRef<Path>) -> HashMap<String, String> { let file = BufReader::new(File::open(&file_name).expect("Failed to open file")); file.lines() .filter_map(|line_result| { // 处理行读取错误,跳过无效行 let line = line_result.ok()?; // 分割键和值,按第一个冒号分割 let mut parts = line.splitn(2, ':'); let key = parts.next()?.trim().to_string(); let value = parts.next()?.trim().to_string(); Some((key, value)) }) .collect() }
关键修正点
- 修复逻辑:遍历文件每一行,用
splitn(2, ':')将每行分割为键和值两部分,处理掉多余空格后转为String - 类型匹配:通过
to_string()将分割得到的&str转为String,满足返回类型要求 - 错误处理:用
filter_map跳过读取失败的行,避免unwrap导致程序 panic
内容的提问来源于stack exchange,提问作者GraXx
相关产品推荐
相关产品推荐

