#等价 #对象 #引用 #相同

is-same

用于比较对象等价的特质

3 个不稳定版本

0.2.1 2020年2月9日
0.2.0 2020年2月8日
0.1.0 2020年2月8日

#2194 in Rust 模式

MIT/Apache

10KB
294

is-same

Crates.io License: MIT/Apache-2.0 build Coverage Status

本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,
}

无运行时依赖