gpt4 book ai didi

arrays - 数组上的 PartialEq

转载 作者:行者123 更新时间:2023-11-29 07:59:11 28 4
gpt4 key购买 nike

关于 rust 数组的问题(恒定大小的数组,[T, ..Size])。我正在尝试进行以下工作:

#[deriving(PartialEq)]
struct Test {
dats : [f32, ..16]
}

我知道我不能使用推导并简单地编写我自己的 PartialEq,但这相当令人讨厌......给出的错误消息对我来说也很神秘(见下文)。有没有合适的乡村方式来做到这一点?

rustc ar.rs 
ar.rs:4:3: 4:20 error: mismatched types: expected `&&[f32]` but found `&[f32, .. 16]` (expected &-ptr but found vector)
ar.rs:4 dat : [f32, ..16]
^~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
ar.rs:2:1: 3:7 note: expansion site
ar.rs:4:3: 4:20 error: mismatched types: expected `&&[f32]` but found `&[f32, .. 16]` (expected &-ptr but found vector)
ar.rs:4 dat : [f32, ..16]
^~~~~~~~~~~~~~~~~
note: in expansion of #[deriving]
ar.rs:2:1: 3:7 note: expansion site
error: aborting due to 2 previous error

从今天开始,我每晚都会使用rust 。

谢谢!

最佳答案

这是一个错误:#7622 “固定长度数组不实现任何特征”。作为 A.B.说,没有办法参数化定长数组的长度,所以实现特征的唯一方法是实际写出来:​​

impl PartialEq for [f32, .. 0] { ... }

impl PartialEq for [f32, .. 1] { ... }

impl PartialEq for [f32, .. 2] { ... }

impl PartialEq for [f32, .. 3] { ... }

// ...

(当然这可以用宏来完成:但是为所有可能的特征做所有可能的长度仍然是不可行的。)

您需要自己实现这些特征,而无需派生,例如

struct Test { dats: [f32, .. 16] }

impl PartialEq for Test {
fn eq(&self, other: &Test) -> bool {
self.dats == other.dats
}
}

fn main() {
let a = Test { dats: [0.0, .. 16 ]};
let b = Test { dats: [100.0, .. 16 ]};

println!("{}", a == b);
}

您可能会觉得很奇怪,您可以将 ==[f32, .. 16] 一起使用而无需实现 PartialEq(这是如何为大多数类型重载 ==,例如上面的 Test):之所以有效,是因为编译器对 == 的方式有一个内在的理解使用固定长度的向量,因此直接使用它而不触及特征。

关于arrays - 数组上的 PartialEq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222337/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com