如何修复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
相关产品推荐
相关产品推荐

