11 个版本
0.5.2 | 2022 年 12 月 22 日 |
---|---|
0.5.1 | 2022 年 10 月 14 日 |
0.5.0 | 2022 年 8 月 19 日 |
0.4.4 | 2021 年 4 月 12 日 |
0.1.0 | 2021 年 3 月 18 日 |
在 Rust 模式 中排名第 277
每月下载量 36,680
用于 17 个crate(9 个直接使用)
53KB
992 行
Easy-cast
类型转换,预期成功
此库旨在使可失败的数值类型转换变得容易,而无需使用 as
关键字。
Conv
与From
类似,但支持可失败转换Cast
对Conv
,就像Into
对From
一样ConvApprox
和CastApprox
支持可失败、近似转换ConvFloat
和CastFloat
类似,提供对舍入的精确控制
如果你想知道“为什么不直接使用 as
”,有以下几个原因
- 整数转换可能会静默截断或符号扩展,这不会保留值
- 在 Rust 1.45.0 之前,浮点数到整数的转换没有完全定义;从这个版本开始,它们使用饱和转换(NaN 转换为 0)
- 你想要一些保证(至少在调试构建中),转换将正确保留值
为什么你可能 不想 使用这个库?
错误处理
所有特性都支持两种方法
try_*
方法返回一个Result
,如果无法正确转换则总是失败。- 其他方法可能会崩溃或返回错误的结果。
在调试构建中,不返回 Result
的方法在失败时必须崩溃。与 Rust 的标准整数算术中的溢出检查一样,这被视为一种查找逻辑错误的工具。在发布构建中,这些方法可以返回定义良好但错误的结果,类似于 as
关键字。
如果设置了 always_assert
功能标志,则将在所有构建中启用断言。还提供了一些额外的功能标志,用于更精细的控制(见 Cargo.toml
)。
性能
性能“足够好,以至于没有成为问题”。
在调试构建和启用 always_assert
时,优先考虑测试,但开销应该很小。
在没有 always_assert
的发布构建中,conv*
方法应该减少到 x as T
(需要添加必要的舍入操作)。
no_std 支持
当禁用 crate 的默认功能(并且未启用 std
)时,库支持 no_std
。在这种情况下,ConvFloat
和 CastFloat
仅在启用 libm
可选依赖项时才可用。
MSRV 和 no_std
最低支持 Rust 版本为 1.53.0(IntoIterator for [T; N]
)。
默认情况下,需要 std
支持。禁用默认功能时,支持 no_std
,但 ConvFloat
和 CastFloat
特性不可用。启用 libm
功能将重新启用这些特性。
版权和许可证
版权文件 COPYRIGHT 包含了声明对本项目拥有版权的贡献者名单。此名单可能不完整;新贡献者可以选择将自己添加到该名单中。
easy-cast 库在 Apache License,Version 2.0 的条款下发布。您可以从此 LICENSE 文件或以下网页获取此许可证副本:https://apache.ac.cn/licenses/LICENSE-2.0
依赖项
~105KB