3 个不稳定版本
0.2.1 | 2020年2月9日 |
---|---|
0.2.0 | 2020年2月8日 |
0.1.0 | 2020年2月8日 |
#2194 in Rust 模式
10KB
294 行
is-same
本crate提供了IsSame特质,专门用于比较已转换的不可变数据。此特质与PartialEq在一些重要方面有所不同
- 浮点数值通过它们的位模式进行比较,防止NaN值使数据结构永久性地比较为不相等。这也允许你检测值从
-0.0
变为0.0
。 - 使用引用等价性来提高比较效率。该库假设
Rc<T>
和Arc<T>
的内容是不可变的且不会改变,因此只需通过它们的指针进行比较。
此特质为许多标准库类型提供了默认实现,但如果有任何缺失,请随意提交问题或贡献PR。有关错误消息或其他可用性问题(包括进程宏)的问题也欢迎!
此特质明确不适用于内部可变类型(Cell、RefCell、AtomicUSize、Mutex等),因为这会使基于引用等价性的假设不成立。如果将来出现问题,这可能会改变。
安装
添加到您的 Cargo.toml
is-same = "0.1"
is-same-derive = "0.1"
用法
use is_same::IsSame;
use is_same_derive::IsSame;
#[derive(IsSame)]
struct MyStruct {
text: String,
foo: usize,
bar: char,
}
fn diff(left: &MyStruct, right: &MyStruct) {
println!("is_same? {}", left.is_same(right));
}
lib.rs
:
本crate提供了IsSame特质,专门用于比较已转换的不可变数据。此特质与PartialEq在一些重要方面有所不同
- 浮点数值通过它们的位模式进行比较,防止NaN值使数据结构永久性地比较为不相等。这也允许你检测值从
-0.0
变为0.0
。 - 使用引用等价性来提高比较效率。该库假设
Rc<T>
和Arc<T>
的内容是不可变的且不会改变,因此只需通过它们的指针进行比较。
还有一个名为 is-same-derive
的crate,可以自动为您的结构体生成IsSame实现
use is_same_derive::IsSame;
#[derive(IsSame)]
struct MyStruct {
count: usize,
ch: char,
text: String,
}