#转换 #转换 #转换 # # #调试

无 std easy-cast

期望成功的类型转换

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

Download history 5961/week @ 2024-03-07 6863/week @ 2024-03-14 6681/week @ 2024-03-21 5779/week @ 2024-03-28 7151/week @ 2024-04-04 6744/week @ 2024-04-11 6500/week @ 2024-04-18 5932/week @ 2024-04-25 6542/week @ 2024-05-02 7094/week @ 2024-05-09 9363/week @ 2024-05-16 9119/week @ 2024-05-23 8575/week @ 2024-05-30 10050/week @ 2024-06-06 9524/week @ 2024-06-13 6908/week @ 2024-06-20

每月下载量 36,680
用于 17crate(9 个直接使用)

Apache-2.0

53KB
992

Easy-cast

Test Status Docs

类型转换,预期成功

此库旨在使可失败的数值类型转换变得容易,而无需使用 as 关键字。

如果你想知道“为什么不直接使用 as”,有以下几个原因

  • 整数转换可能会静默截断或符号扩展,这不会保留值
  • 在 Rust 1.45.0 之前,浮点数到整数的转换没有完全定义;从这个版本开始,它们使用饱和转换(NaN 转换为 0)
  • 你想要一些保证(至少在调试构建中),转换将正确保留值

为什么你可能 不想 使用这个库?

  • 你想要饱和/截断/其他非保留值转换
  • 你想要转换非数值类型(From 支持的转换比 Conv 更多)!
  • 你想要一个经过充分测试的库(我们还没有完全做到这一点)

错误处理

所有特性都支持两种方法

  • try_* 方法返回一个 Result,如果无法正确转换则总是失败。
  • 其他方法可能会崩溃或返回错误的结果。

在调试构建中,不返回 Result 的方法在失败时必须崩溃。与 Rust 的标准整数算术中的溢出检查一样,这被视为一种查找逻辑错误的工具。在发布构建中,这些方法可以返回定义良好但错误的结果,类似于 as 关键字。

如果设置了 always_assert 功能标志,则将在所有构建中启用断言。还提供了一些额外的功能标志,用于更精细的控制(见 Cargo.toml)。

性能

性能“足够好,以至于没有成为问题”。

在调试构建和启用 always_assert 时,优先考虑测试,但开销应该很小。

在没有 always_assert 的发布构建中,conv* 方法应该减少到 x as T(需要添加必要的舍入操作)。

no_std 支持

当禁用 crate 的默认功能(并且未启用 std)时,库支持 no_std。在这种情况下,ConvFloatCastFloat 仅在启用 libm 可选依赖项时才可用。

MSRV 和 no_std

最低支持 Rust 版本为 1.53.0(IntoIterator for [T; N])。

默认情况下,需要 std 支持。禁用默认功能时,支持 no_std,但 ConvFloatCastFloat 特性不可用。启用 libm 功能将重新启用这些特性。

版权文件 COPYRIGHT 包含了声明对本项目拥有版权的贡献者名单。此名单可能不完整;新贡献者可以选择将自己添加到该名单中。

easy-cast 库在 Apache License,Version 2.0 的条款下发布。您可以从此 LICENSE 文件或以下网页获取此许可证副本:https://apache.ac.cn/licenses/LICENSE-2.0

依赖项

~105KB