Rust 如何访问数组类型结构的元素

Rust 如何访问数组类型结构的元素,rust,Rust,我创建了以下结构 pub const BUCKET_SIZE: usize = 4; pub const FINGERPRINT_SIZE: usize = 1; pub struct Fingerprint ([u8; FINGERPRINT_SIZE]); impl Fingerprint { pub fn new(bytes: [u8; FINGERPRINT_SIZE]) -> Fingerprint { return Fingerprint(byte

我创建了以下结构

pub const BUCKET_SIZE: usize = 4;

pub const FINGERPRINT_SIZE: usize = 1;

pub struct Fingerprint ([u8; FINGERPRINT_SIZE]);

impl Fingerprint {
    pub fn new(bytes: [u8; FINGERPRINT_SIZE]) -> Fingerprint {
        return Fingerprint(bytes);
    }
}

pub struct Bucket ([Fingerprint; BUCKET_SIZE]);

impl Bucket {
    pub fn new(fingerprints: [Fingerprint; BUCKET_SIZE]) -> Bucket {
        Bucket(fingerprints)
    }
    pub fn insert(&self, fp: Fingerprint) -> bool {
        for i in 0..BUCKET_SIZE {



            //HERE IS THE ERROR
            if (self[i as usize] == 0) {
                self[i as usize] = fp;
                return true;
            }



        }
        return false;
    }
}
当试图编译它时,我得到以下错误

error: cannot index a value of type `&bucket::Bucket`

让Bucket保存属性指纹是否更有意义?

类型
Bucket
是一个具有一个字段的元组结构,您可以使用
.0
访问该结构

因此,您可以将代码更改为:

        if (self.0[i as usize] == 0) {
            self.0[i as usize] = fp;
            return true;
        }

您还需要将函数参数从
&self
更改为
&mut self
,以便可以对
self
的字段进行变异。工作。但是正在查看一个新错误。self.0[i as usize]==0>>>>>错误:二进制操作
=
无法应用于类型
bucket::Fingerprint
[E0369]指纹也是一个元组结构,因此您需要它是
self.0[i as usize].0==0
。此外,您还可以研究如何实现索引特性,以便直接将索引编入这些元组结构。