#转换 #数值 #数字 # #num #特性 #类型

as_num

在 Rust 的数值类型之间进行校验转换

10 个版本

0.3.1 2023 年 10 月 6 日
0.2.5 2018 年 12 月 31 日
0.2.4 2018 年 7 月 21 日
0.2.3 2017 年 8 月 5 日
0.1.2 2017 年 1 月 21 日

#554Rust 模式

Download history 203/week @ 2024-03-11 209/week @ 2024-03-18 231/week @ 2024-03-25 257/week @ 2024-04-01 189/week @ 2024-04-08 197/week @ 2024-04-15 206/week @ 2024-04-22 192/week @ 2024-04-29 86/week @ 2024-05-06 99/week @ 2024-05-13 82/week @ 2024-05-20 54/week @ 2024-05-27 64/week @ 2024-06-03 64/week @ 2024-06-10 58/week @ 2024-06-17 58/week @ 2024-06-24

每月 252 次下载
5 个 crate 中使用(通过 kompact

MIT/Apache 许可

17KB
304

此模块实现了对数字转换的一种非常主观的方法。

想象一下,你有一个函数 return_u32,你希望将它的返回值传递给另一个函数 take_i8

fn return_u32() -> u32 {
    257
}
fn take_i8(i: i8) {
}

然后,编译器(正确地)在你写下 take_i8(return_u32()) 时立即抱怨。我经常遇到这种情况,所以我只是将其改为 take_i8(return_u32() as i8)。然而,在这样做的时候,我隐含地假设了数字的语义意义没有改变,即我假设 i8 能够表示 return_u32 给出的确切相同的值(在示例中并不适用)。

此模块使您能够编写以下内容

use as_num::TAsNum; // TAsNum is the trait enabling the conversions
take_i8(return_u32().as_num())

as_num 将其参数转换为目标类型,从而检查是否可以在不丢失数据的情况下进行转换。

它试图采用与例如 "普通加法" 和 checked_add 相似的方法:它提供了一个 as_num 方法来进行转换(最后下降到 Rust 的 as),并通过 debug_assert 确认转换是无损的。除了 as_num 之外,它还提供了一个返回 Optionchecked_as_num 方法。

本模块实现了以下类型任意组合的转换:i8i16i32i64isizeu8u16u32u64usizef32f64

函数as_num会使用debug_assert来确保目标值可以转换回精确的源值。

特别是,这意味着只有当源值已经四舍五入到某个整数时,才能使用as_num将浮点数转换为整数。

无运行时依赖