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

如何修复Rust中swap方法的测试函数编译问题?

Rust交换函数测试编译错误的修正方案

问题分析

你的测试函数存在三个核心问题,导致编译失败:

  • 无法对字面量取可变引用:&mut 26这种写法不合法,字面量是不可变常量,不能创建可变引用,必须先声明可变绑定的变量。
  • 错误的断言逻辑:swap函数返回值是()(无返回值),不能用==和数值做比较,断言逻辑完全错误。
  • assert!用法错误:assert!接收布尔表达式,你传入的参数格式不符合要求,应该用assert_eq!验证变量交换后的预期值。

修正后的测试代码

#[test]
fn test_swap() {
    let mut a = 26;
    let mut b = 10;
    
    swap(&mut a, &mut b);
    
    assert_eq!(a, 10);
    assert_eq!(b, 26);
}

修正说明

  • 先声明两个可变变量a和b,初始化测试用的初始值,这样才能获取合法的可变引用传给swap。
  • 调用swap完成交换后,用assert_eq!分别验证a和b是否变成预期的交换后的值,assert_eq!会自动对比实际值与预期值,不相等时抛出清晰的测试失败信息。

完整可运行代码

fn swap(a: &mut u32, b: &mut u32) {
    let temp: u32 = *a;         // 将a的值存储到temp中
    *a = *b;                    // 将b的值赋值给a
    *b = temp;                  // 将temp的值(原a的值)赋值给b
                                // 现在值已完成交换
}

fn main() {
    let mut a = 26;             // 给a赋值26
    let mut b = 10;             // 给b赋值10
    
    println!("Before swap: ");
    println!("{}, {}", a, b);   // 打印a和b的原始值

    swap(&mut a, &mut b);       // 调用swap函数

    println!("After swap: ");
    println!("{}, {}", a, b);   // 打印交换后的a和b的值(预期为"10, 26")
}

#[test]
fn test_swap() {
    let mut a = 26;
    let mut b = 10;
    
    swap(&mut a, &mut b);
    
    assert_eq!(a, 10);
    assert_eq!(b, 26);
}

执行cargo test即可正常编译并通过测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:55:21