当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust StructuralEq用法及代码示例


本文简要介绍rust语言中 Trait core::marker::StructuralEq 的用法。

用法

pub trait StructuralEq { }

模式匹配中使用的常量的必需特征。

任何派生类型Eq自动实现这个特性,不管其类型参数是否实现Eq.

这是一种解决我们类型系统限制的技巧。

背景

我们希望要求模式匹配中使用的 const 类型具有属性 #[derive(PartialEq, Eq)]

在更理想的情况下,我们可以通过检查给定类型是否实现了StructuralPartialEq特征 Eq特征。但是,您可以使用 ADT derive(PartialEq, Eq),并且是我们希望编译器接受的情况,但常量的类型无法实现Eq.

即,像这样的情况:

#[derive(PartialEq, Eq)]
struct Wrap<X>(X);

fn higher_order(_: &()) { }

const CFN: Wrap<fn(&())> = Wrap(higher_order);

fn main() {
    match CFN {
        CFN => {}
        _ => {}
    }
}

(上面代码中的问题是 Wrap<fn(&())> 没有实现 PartialEq ,也没有 Eq ,因为 for<'a> fn(&'a _) 没有实现这些特征。)

因此,我们不能仅仅依赖 StructuralPartialEqEq 的天真检查。

作为解决此问题的技巧,我们使用两个派生(#[derive(PartialEq)]#[derive(Eq)])中的每一个注入的两个单独的特征,并检查它们是否都作为 structural-match 检查的一部分存在。

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Trait core::marker::StructuralEq。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。