使用结构:
struct U85 (
[u8; 5]
);
我收到错误:
error[E0608]: cannot index into a value of type `&U85`
--> /home/fadedbee/test.rs:11:40
|
11 | s.serialize_bytes(&self[..])
|
而当我使用简单类型 [u8; 5]
时,一切都很好。
[u8; 5]
的什么特征导致索引错误?U85
实施它?答案 0 :(得分:2)
x[y]
语法是通过 Index
和 IndexMut
特征实现的。切片索引的一个问题是 x
、x..y
、..
、..y
、x..
都是不同的类型。你可以选择你想要支持的东西,但如果你只想做切片可以做的事情,你可以像这样实现它:
use std::ops::Index;
use std::slice::SliceIndex;
struct U85([u8; 5]);
impl<I> Index<I> for U85 where I: SliceIndex<[u8]> {
type Output = I::Output;
fn index(&self, index: I) -> &I::Output {
&self.0[index]
}
}
如果您发现自己为包装类型实现了很多特征,您可以考虑使用 derive_more 板条箱,这将允许您派生出遵循内部类型的特征(如 Index
)。
use derive_more::Index;
#[derive(Index)]
struct U85([u8; 5]);