Rust 如何在不出现错误的情况下实施Ord特性”;使用不稳定的库功能';夹具'&引用;?
我有一个结构,我想用它作为Rust 如何在不出现错误的情况下实施Ord特性”;使用不稳定的库功能';夹具'&引用;?,rust,clamp,Rust,Clamp,我有一个结构,我想用它作为BTreeMap中的键,所以我实现了PartialEq,Eq,PartialOrd和Ord。最后一种方法会导致问题,因为存在不安全的clamptrait方法 我是这样实施的: 使用std::cmp::排序; #[派生(调试、均衡、复制、克隆)] 结构Baz(usize); Baz的impl PartialEq{ fn eq(&self,其他:&self)->bool{ self.0.eq和other.0) } fn ne(&self,其他:&self)->bool{ s
BTreeMap
中的键,所以我实现了PartialEq
,Eq
,PartialOrd
和Ord
。最后一种方法会导致问题,因为存在不安全的clamp
trait方法
我是这样实施的:
使用std::cmp::排序;
#[派生(调试、均衡、复制、克隆)]
结构Baz(usize);
Baz的impl PartialEq{
fn eq(&self,其他:&self)->bool{
self.0.eq和other.0)
}
fn ne(&self,其他:&self)->bool{
self.0.ne(&other.0)
}
}
为Baz执行部分命令{
fn部分\u cmp(&self,其他:&self)->选项{
self.0.partial_cmp(&other.0)
}
fn lt(&self,其他:&self)->bool{
self.0.lt(&other.0)
}
fn-le(&self,其他:&self)->bool{
self.0.le(&other.0)
}
fn gt(&self,其他:&self)->bool{
self.0.gt(&other.0)
}
fn ge(&self,其他:&self)->bool{
self.0.ge(&other.0)
}
}
巴兹的恳求{
fn cmp(&self,其他:&self)->订购{
self.0.cmp(&other.0)
}
fn最大值(自我,其他:自我)->自我
哪里
自我:大小,
{
Self(Self.0.max(other.0))
}
fn最小值(自我,其他:自我)->自我
哪里
自我:大小,
{
Self(Self.0.min(other.0))
}
fn夹(自,最小:自,最大:自)->自
哪里
自我:大小,
{
自身(自身0.夹具(最小0,最大0))
}
}
fn main(){
Baz(1);
}
据我所知,整数的钳位是安全的,应该可以正常工作,但生锈给了我错误
错误[E0658]:使用不稳定的库功能“钳制”
-->src/main.rs:57:5
|
57 |/fn夹钳(自,最小:自,最大:自)->self
58 | |在哪里
59 | |自我:大小,
60 | | {
61 | | Self(Self.0.夹具(最小0,最大0))
62 | | }
| |_____^
|
=注:有关更多信息,请参阅https://github.com/rust-lang/rust/issues/44095
错误[E0658]:使用不稳定的库功能“夹具”
-->src/main.rs:61:21
|
61 | Self(Self.0.夹具(最小0,最大0))
| ^^^^^
|
=注:有关更多信息,请参阅https://github.com/rust-lang/rust/issues/44095
我怎样才能解决这个问题?我用的是Rust 1.41
据我所知,整数的钳位是安全的,应该可以正常工作,但生锈给了我错误
这是因为该方法不稳定——编译器没有骗你。但是,这是一个带有的方法,因此您不需要实现它(也不应该实现,除非您可以改进默认实现)
有益的是,Ord
文档中有一个标题为的部分,它准确地描述了您需要做什么:
Ord
要求类型也为PartialOrd
和Eq
(需要PartialEq
)
然后必须为cmp()
定义一个实现。您可能会发现在类型的字段上使用cmp()
很有用
特别相关的是,Ord
可以派生:
此特性可与#[派生]
一起使用。当derivate
d位于结构上时,它将根据结构成员从上到下的声明顺序生成字典顺序。当枚举上的derivate
d时,变量按从上到下的声明顺序排序
您的整个代码可能是
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone)]
struct Baz(usize);
另见:
夹持
特征方法-它不是不安全的
,不清楚你为什么认为它是不安全的。根据你的要求添加了游乐场链接。“参见”中的第一个链接对我有效。谢谢!