#多态 #特质 #动态 #实用工具 #任何

polymorph

一套工具,以更好地在 Rust 中实现多态行为

1 个不稳定版本

0.1.0 2021 年 10 月 28 日

#15#多态

Apache-2.0 协议

35KB
572 行(不包括注释)

Polymorph

unsafe forbidden

一套工具,以更好地在 Rust 中实现多态行为。

简介

Rust 是一门优秀的语言,强调快速、静态派发和静态确定的内存管理。这很棒,但对于动态语言的开发者来说却难以适应。

这个软件包旨在实现更多动态编程,同时遵守 Rust 的核心原则:只为你需要的功能付费,并且在这样做时产生很少的开销。

  • 想决定是否返回一个拥有值或一个借用引用?现在你可以这样做,而无需更改你函数的返回类型。
  • 想使用特质对象,但又不喜欢 Box<dyn MyTrait> 需要拥有权?现在你可以选择返回一个借用或拥有特质对象。

功能

Ref(Mut)OrOwned

RefOrOwned<T> 是一个枚举,覆盖了 &TT。这与 Cow 类似,因为它抽象了拥有权和借用。然而,与需要 ToOwnedCow 不同,RefOrOwned 不需要。

  • RefOrOwned<T> 实现了到 TDeref,以及更广泛的 Rust 标准特质,这样你可以轻松地与之交互。
  • 还有一个 RefMutOrOwned 版本,当需要 &mut T 时使用。
  • T: Clone 时,提供 into_owned 方法。
  • 该类型还实现了 From<&T>From<T>,这样你可以使用 Into<RefOrOwned<T>> 来创建高度灵活的函数参数。

Ref(Mut)OrBox

RefOrBox<T> 是一个在 &TBox<T> 上的枚举。虽然与 RefOrOwned 类似,但 RefOrBox 主要用于 T 是未指定大小的情况,尤其是当 T 是一个 trait 对象时。

  • RefOrBox<T> 尽可能在标准 trait 中实现,包括将 Deref 实现为 T
  • 通过 trait-clone 功能提供对 dyn-clone 包的可选支持。如果 T: DynClone,将提供 into_owned 方法。关于这一点稍后详细介绍。

RefMutOrBoxRefOrBox 的一个版本,它使用 &mut T,并且可以解引用到一个可变值。

安全性

  • 库中不包含不安全代码
  • 库永远不会崩溃

依赖项

将此库添加到您的 Cargo.toml

[dependencies]
polymorph = "0.1"

功能

提供此包的所有 Cargo 功能。如果需要,每个功能都必须单独启用。

trait-clone

要启用与 dyn-clone trait 的互操作性,请启用此功能。

[dependencies]
polymorph = { version = "0.1", features = ["trait-clone"]}

这将添加一个 RefOrBox::into_owned 方法,该方法返回一个 Box<T>,无论是通过返回所有权的盒子还是克隆借用值。

其他信息

组合性

Polymorph 与 dyn-cloneenum-dispatch 包的良好结合,实现了灵活和有效的动态编程。

注意

Polymorph 的结构和枚举类型受到密切关注,以确保它们实现了标准 trait。在正确实现标准 trait 时,代码的可互操作性和重用性最佳。

如果您发现可以实现标准 trait 的地方,请在此存储库中提交一个问题。

许可

Apache License v2.0 许可。请参阅 LICENSE.txt。

依赖项