索引 (Indexing)
TicketStore::get 接受一个 TicketId 并返回 Option<&Ticket>。
我们之前见过怎么用 Rust 的索引语法访问数组和向量的元素:
let v = vec![0, 1, 2];
assert_eq!(v[0], 0);
我们怎么为 TicketStore 提供同样的体验?
你猜对了:我们要实现一个特质——Index!
Index
Index 特质定义在 Rust 标准库中:
// 略简化
pub trait Index<Idx>
{
type Output;
// 必须实现的方法
fn index(&self, index: Idx) -> &Self::Output;
}
它有:
- 一个泛型参数
Idx,用于表示索引类型 - 一个关联类型
Output,表示通过索引获取到的值的类型
注意 index 方法不返回 Option。预设是:当你尝试访问不存在的元素时 index 会 panic,跟数组和 vec 的索引一样。
原文链接:英文原文