我有这个结构:
struct Test {
data: Vec<u8>,
}
impl Test {
fn new() -> Self {
return Test { data: Vec::new() };
}
}
let a = Test::new();
// populate something into a...
例如,我想为这种类型实现切片&a[2..5]
,它返回指向其内部2..5
中的data
的切片。可以在Rust中做到这一点吗?
答案 0 :(得分:1)
您可以通过实现Index
特征并将索引绑定到SliceIndex
来实现:
struct Test {
data: Vec<u8>,
}
impl Test {
fn new(data: Vec<u8>) -> Self {
Test { data }
}
}
impl<Idx> std::ops::Index<Idx> for Test
where
Idx: std::slice::SliceIndex<[u8], Output = [u8]>,
{
type Output = [u8];
fn index(&self, index: Idx) -> &Self::Output {
&self.data[index]
}
}
fn main() {
let test = Test::new(vec![1, 2, 3]);
let slice = &test[1..];
assert_eq!(slice, [2, 3]);
}