You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决使用sysinfo crate trait的函数doctest编译失败问题?

解决sysinfo crate doctest中缺少SystemExt trait的问题

我之前也碰到过一模一样的问题,核心原因是doctest的编译上下文是完全独立的——哪怕你的主代码里已经导入了SystemExt trait,doctest的代码块也不会自动继承这些导入,必须在测试代码里单独处理。

下面是具体的解决步骤:

1. 在doctest代码块中显式导入trait

你的报错本质是total_memory()这类方法是SystemExt trait提供的扩展方法,而非System结构体本身的方法。所以必须在测试代码里导入这个trait,才能调用这些方法。

比如把你的函数文档改成这样:

/// 获取系统内存信息
///
/// # Examples
///
/// ```
/// use sysinfo::{System, SystemExt};
///
/// let sys = System::new_all();
/// println!("总内存: {} bytes", sys.total_memory());
/// ```
pub fn get_memory_info() -> (u64, u64) {
    let mut sys = System::new_all();
    sys.refresh_memory();
    (sys.total_memory(), sys.used_memory())
}

2. (可选)隐藏导入语句让例子更简洁

如果你不想让用户看到导入代码,可以在use语句前加#,doctest会自动处理这些带#的行——编译时会包含它们,但显示给用户时会隐藏:

/// 获取系统内存信息
///
/// # Examples
///
/// ```
/// # use sysinfo::{System, SystemExt};
/// let sys = System::new_all();
/// println!("总内存: {} bytes", sys.total_memory());
/// ```

3. 确认Cargo.toml的依赖配置

确保你的Cargo.toml里已经正确添加了sysinfo依赖,比如:

[dependencies]
sysinfo = "0.29.0" # 替换成你实际使用的版本号

doctest会复用主代码的依赖配置,只要主代码能正常编译,doctest就能找到这个crate。

这样修改后,再运行cargo test应该就能正常编译并执行doctest了。

内容的提问来源于stack exchange,提问作者m00am

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:28