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);
另见:


很难回答您的问题,因为它没有包含一个。我们无法说出代码中存在哪些板条箱(及其版本)、类型、特征、字段等。如果您试图重现您的错误(如果可能的话),或者在全新的货运项目中,那么我们将更容易帮助您,然后您的问题将包括附加信息。您可以使用以下方法减少在此处发布的原始代码。谢谢一种不安全的
夹持
特征方法-它不是
不安全的
,不清楚你为什么认为它是不安全的。根据你的要求添加了游乐场链接。“参见”中的第一个链接对我有效。谢谢!