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 日 |
#554 在 Rust 模式
每月 252 次下载
在 5 个 crate 中使用(通过 kompact)
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
之外,它还提供了一个返回 Option
的 checked_as_num
方法。
本模块实现了以下类型任意组合的转换:i8
、i16
、i32
、i64
、isize
、u8
、u16
、u32
、u64
、usize
、f32
、f64
。
函数as_num
会使用debug_assert
来确保目标值可以转换回精确的源值。
特别是,这意味着只有当源值已经四舍五入到某个整数时,才能使用as_num
将浮点数转换为整数。