索引
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。