當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。