本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。