本文簡要介紹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 _)
沒有實現這些特征。)
因此,我們不能僅僅依賴 StructuralPartialEq
和 Eq
的天真檢查。
作為解決此問題的技巧,我們使用兩個派生(#[derive(PartialEq)]
和 #[derive(Eq)]
)中的每一個注入的兩個單獨的特征,並檢查它們是否都作為 structural-match 檢查的一部分存在。
相關用法
- Rust String.try_reserve用法及代碼示例
- Rust String.insert_str用法及代碼示例
- Rust String.into_raw_parts用法及代碼示例
- Rust String.extend_from_within用法及代碼示例
- Rust String.clear用法及代碼示例
- Rust String.reserve用法及代碼示例
- Rust String.from_utf16_lossy用法及代碼示例
- Rust String.push用法及代碼示例
- Rust String.as_bytes用法及代碼示例
- Rust String.as_str用法及代碼示例
- Rust String.with_capacity用法及代碼示例
- Rust String.remove用法及代碼示例
- Rust String.from_utf8_lossy用法及代碼示例
- Rust String.into_bytes用法及代碼示例
- Rust String.replace_range用法及代碼示例
- Rust String.split_off用法及代碼示例
- Rust String.from_utf16用法及代碼示例
- Rust String.shrink_to_fit用法及代碼示例
- Rust String.from_utf8_unchecked用法及代碼示例
- Rust String.into_boxed_str用法及代碼示例
- Rust String用法及代碼示例
- Rust String.new用法及代碼示例
- Rust String.insert用法及代碼示例
- Rust String.capacity用法及代碼示例
- Rust String.try_reserve_exact用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Trait core::marker::StructuralEq。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。