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
。此外,您还可以研究如何实现索引特性,以便直接将索引编入这些元组结构。