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将浮点数转换为整数。