索引

TicketStore::get 方法针对给定的 TicketId 返回一个 Option<&Ticket>。之前我们已经了解了如何使用 Rust 的索引语法来访问数组和向量的元素:

#![allow(unused)]
fn main() {
let v = vec![0, 1, 2];
assert_eq!(v[0], 0);
}

我们怎样才能为 TicketStore 提供类似的访问体验呢?你猜对了:我们需要实现一个特质,那就是 Index

Index 特质

Index 特质是在 Rust 的标准库中定义的:

#![allow(unused)]
fn main() {
// 略微简化的版本
pub trait Index<Idx> {
    type Output;

    // 必须实现的方法
    fn index(&self, index: Idx) -> &Self::Output;
}
}

它包含:

  • 一个泛型参数 Idx,用于表示索引类型
  • 一个关联类型 Output,表示通过索引获取的类型

注意,index 方法并不返回一个 Option。其假设是如果你尝试访问不存在的元素,index 会像数组和向量索引那样 panic。