首页 > 解决方案 > 为什么对 usize 数字的减法运算不能为负数,Rust 惯用的处理方式是什么?

问题描述

s并且t是向量。如果我们这样做:

t.len() - s.len()

attempt to subtract with overflow如果减法结果为负数,则可能会导致错误(因为两种类型都是usize)。

但是,如果我们不知道这两种类型都是usize,并且我们期望结果可能是负数,它可能会导致一个棘手的错误(我自己也遇到过,并且只在运行时在边缘情况下捕获它)。为了修复这个错误,我将它们转换为:

t.len() as i32 - s.len() as i32

我的问题是:

标签: rust

解决方案


我不知道,idiomatic way但我相信usize::checked_subusize::overflowing_sub可能是好的解决方案。

所以最后它可能看起来像:

match t.len().checked_sub(s.len()) {
    None => println!("Error"),
    Some(diff) => println!("Difference is {}", diff),
}

推荐阅读