1 个不稳定版本
0.1.0 | 2021 年 10 月 28 日 |
---|
#15 在 #多态
35KB
572 行(不包括注释)
Polymorph
一套工具,以更好地在 Rust 中实现多态行为。
简介
Rust 是一门优秀的语言,强调快速、静态派发和静态确定的内存管理。这很棒,但对于动态语言的开发者来说却难以适应。
这个软件包旨在实现更多动态编程,同时遵守 Rust 的核心原则:只为你需要的功能付费,并且在这样做时产生很少的开销。
- 想决定是否返回一个拥有值或一个借用引用?现在你可以这样做,而无需更改你函数的返回类型。
- 想使用特质对象,但又不喜欢
Box<dyn MyTrait>
需要拥有权?现在你可以选择返回一个借用或拥有特质对象。
功能
Ref(Mut)OrOwned
RefOrOwned<T>
是一个枚举,覆盖了 &T
和 T
。这与 Cow
类似,因为它抽象了拥有权和借用。然而,与需要 ToOwned
的 Cow
不同,RefOrOwned
不需要。
RefOrOwned<T>
实现了到T
的Deref
,以及更广泛的 Rust 标准特质,这样你可以轻松地与之交互。- 还有一个
RefMutOrOwned
版本,当需要&mut T
时使用。 - 当
T: Clone
时,提供into_owned
方法。 - 该类型还实现了
From<&T>
和From<T>
,这样你可以使用Into<RefOrOwned<T>>
来创建高度灵活的函数参数。
Ref(Mut)OrBox
RefOrBox<T>
是一个在 &T
和 Box<T>
上的枚举。虽然与 RefOrOwned
类似,但 RefOrBox
主要用于 T 是未指定大小的情况,尤其是当 T 是一个 trait 对象时。
RefOrBox<T>
尽可能在标准 trait 中实现,包括将Deref
实现为T
。- 通过 trait-clone 功能提供对 dyn-clone 包的可选支持。如果
T: DynClone
,将提供into_owned
方法。关于这一点稍后详细介绍。
RefMutOrBox
是 RefOrBox
的一个版本,它使用 &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-clone
和 enum-dispatch
包的良好结合,实现了灵活和有效的动态编程。
注意
Polymorph 的结构和枚举类型受到密切关注,以确保它们实现了标准 trait。在正确实现标准 trait 时,代码的可互操作性和重用性最佳。
如果您发现可以实现标准 trait 的地方,请在此存储库中提交一个问题。
许可
Apache License v2.0 许可。请参阅 LICENSE.txt。