Rust的std::ops::Index<T>
only支持T
为usize
。这背后的原因是什么?
此外,当您尝试使用其他任何内容时,没有建议“尝试使用usize”,只是“特征[&'static str]: core::ops::Index<u8>
不满意”错误。这可能是因为他们计划支持更多类型T
,但由于某种原因推迟这样做了吗?
答案 0 :(得分:9)
Rust
std::ops::Index<T>
仅支持T
成为usize
。
这不是真的。例如,HashMap
接受密钥类型可以借用的任何类型(因此您可以使用HashMap<String, _>
索引&str
。
切片只允许您使用usize
对其进行索引,所有容器类型在内存中假装为或实际上 是线性的。这是因为usize
是用于索引它们的正确的类型。任何其他类型将无法访问容器的完整潜在范围,或者将允许不可能存在的索引。
过去人们已经问过要添加较小的类型来进行切片索引,但这种方法会向后兼容,因此不会很快发生。