Indexing 为什么所有类型的锈蚀指数都是usize?

Indexing 为什么所有类型的锈蚀指数都是usize?,indexing,rust,Indexing,Rust,Rust的std::ops::Index支持T成为usize。这背后的原因是什么 此外,当您尝试使用其他任何东西时,没有“尝试使用usize”的建议,只有“trait[&'static str]:core::ops::Index未满足”错误。这可能是因为他们计划支持更多的类型T,但由于某种原因推迟了这样做吗 Rust的std::ops::Index仅支持T作为usize 这不是真的,例如,接受键类型可以借用到的任何类型(因此可以使用&str索引HashMap) 切片只允许您使用usize对它们进

Rust的
std::ops::Index
支持
T
成为
usize
。这背后的原因是什么

此外,当您尝试使用其他任何东西时,没有“尝试使用usize”的建议,只有“trait
[&'static str]:core::ops::Index
未满足”错误。这可能是因为他们计划支持更多的类型
T
,但由于某种原因推迟了这样做吗

Rust的
std::ops::Index
仅支持
T
作为
usize

这不是真的,例如,接受键类型可以借用到的任何类型(因此可以使用
&str
索引
HashMap

切片只允许您使用
usize
对它们进行索引,就像所有在内存中假装或实际上是线性的容器类型一样。这是因为
usize
是索引它们的正确类型。任何其他类型要么无法访问容器的全部潜在范围,要么将允许不可能存在的索引


过去人们曾询问过向切片索引添加较小的类型,但这将是向后不兼容的,因此不会很快发生。

实际上有一些提示-“注意:切片索引是数组上的类型
usize
”,以及“类型
std::vec::vec
不能通过
u8
进行索引”在向量上。不过,无可否认,它们并没有那么清晰。添加带有较小类型的索引怎么会向后不兼容?@delnan目前,
一些arr[0]
可以工作,因为切片只有一个
索引的实现。如果您添加了其他内容,编译器将无法再决定您需要哪一个。至少,我是这么记得的。哦,说得好。有一条出路(除了更明智的推断):我明白了。向后兼容性问题打破了添加更多类型的局面。谢谢@米凯维利安姆森:首先,你忘了Rust有类型推断。如果您突然也可以通过
u32
进行索引,则Rust根据变量作为索引的用法推断变量类型的情况将不再编译,因为存在多个可能的解决方案。其次,您忘记了Rust也针对可能只有16位
usize
s的嵌入式处理器,这意味着
u32
索引并不总是安全的。第三:当我说“切片”时,我的意思是
[T]
,而不是
a..b
,它是一个
范围。