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

如何在Rust Playground中运行Doctest?示例执行失败

解决Rust Playground中Doctest的"未声明模块"错误

问题原因

Rust的文档测试(doctest)会将每个代码块作为独立编译单元处理,而Playground单文件环境默认不会自动导入当前crate的顶层函数/模块。原示例中使用doccomments::add是基于本地Cargo项目的自定义crate名称,但Playground默认crate名并非doccomments,且未显式导入目标函数,因此触发编译报错。

解决方案

方法1:显式导入当前模块内容

在文档测试的代码块开头添加use self::*;,直接导入当前crate的所有顶层项,适配任意crate名称:

/// 加法函数,计算两个i32的和
///
/// # Examples
///
/// ```
/// use self::*;
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    println!("2 + 3 = {}", add(2, 3));
}

方法2:直接调用顶层公开函数

对于顶层公开函数,文档测试允许直接调用(无需额外导入),可简化代码块:

/// 加法函数,计算两个i32的和
///
/// # Examples
///
/// ```
/// let result = add(2, 3);
/// assert_eq!(result, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    println!("2 + 3 = {}", add(2, 3));
}

方法3:绑定当前crate别名

如果需要显式指定crate调用路径,可将当前crate绑定为Playground默认的别名:

/// 加法函数,计算两个i32的和
///
/// # Examples
///
/// ```
/// extern crate self as playground;
/// let result = playground::add(2, 3);
/// assert_eq!(result, 5);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn main() {
    println!("2 + 3 = {}", add(2, 3));
}

验证方式

在Playground中点击顶部的Test按钮(而非Run),即可执行cargo test,此时doctest会正常编译并运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:55:32