为自定义类型实现切片

时间:2019-07-25 13:23:13

标签: rust

我有这个结构:

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中做到这一点吗?

1 个答案:

答案 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]);
}