#non-empty #slice #traits #vec #mut #vec-t #counterpart

no-std oom

一种或多种类型(Haskell NonEmpty)

1 个不稳定版本

0.3.0 2020年9月2日
0.2.0 2020年9月2日
0.1.0 2020年9月2日
0.0.1 2020年9月2日

#170解析工具

每月 26 次下载

MIT 许可证

23KB
380

oom - 一种或多种 slice 类型

Build Status Documentation Crates.io

受到“解析,不要验证”文章的启发。

此包定义了三种类型:NonEmptySliceNonEmptyMutSliceNonEmptyVec。这些类型没有实现 DerefDerefMut 特性,这是故意的,以避免在解析方法时产生混淆。如果您想 &[T],请考虑使用 as_sliceas_mut_slice 方法。

NonEmptySliceNonEmptyMutSlice

  • 是借用类型(非拥有类型)。
  • &[T]&mut [T] 的对应类型。
  • 具有与 &[T] 相同的大小和类似的位置。
  • 不能在没有从数组、切片或 Vec 借用内容的情况下使用。

NonEmptyVec:

  • 是拥有类型,对应于 Vec<T>
  • 没有 pushpop 方法,因为这些是可能失败的操作。我必须处理我不太有信心实现的非安全代码。

&[T]Vec<T> 的区别

  • .len() 返回 std 的 NonZeroUsize
  • .is_empty() 总是 false。
  • 这些方法不返回 None
    • first
    • first_mut
    • last
    • last_mut
    • split_first
    • split_last
    • split_first_mut
    • split_last_mut

显著特性

  • #![无标准库]
  • 无外部依赖
  • 无宏定义
  • 即时构建时间。

支持的Rust版本

最新稳定版。我使用了仅在Rust v1.46.0中可用的新的条件流,在 const fn 中。

用法

将其添加到您的 Cargo.toml

[dependencies]
oom = "0.3.0"

或者假设您已安装 cargo-edit,则使用

cargo add oom

感谢以下灵感的启发

许可证

本存储库中的所有代码均在MIT许可证下发布,有关更多信息,请参阅COPYRIGHT文件。

无运行时依赖