gpt4 book ai didi

rust - 为什么我可以在 Rust 中从向量的末尾开始切片?

转载 作者:行者123 更新时间:2023-12-03 11:23:25 24 4
gpt4 key购买 nike

给定 v = vec![1,2,3,4] ,为什么v[4..]返回一个空向量,但 v[5..] panic ,而两者 v[4]v[5] panic ?我怀疑这与没有指定开始或端点的切片的实现有关,但我在网上找不到任何有关此的信息。

最佳答案

这仅仅是因为 std::ops::RangeFrom 被定义为“包含在下面”。
快速回顾所有管道:v[4..]脱糖至 std::ops::Index 使用 4.. (解析为 std::ops::RangeFrom )作为参数。 std::ops::RangeFrom 工具 std::slice::SliceIndex Vec有一个 implementation std::ops::Index 对于任何实现 std::slice::SliceIndex 的参数.所以你看到的是一个 RangeFrom 习惯了 std::ops::Index Vec .
std::ops::RangeFrom 被定义为始终包含在下界。例如 [0..]将包括被索引事物的第一个元素。如果(在您的情况下)Vec为空,则 [0..]将是空切片。注意:如果下限不包含,则无法切片空 Vec完全不会引起 panic ,这会很麻烦。
一个简单的思考方式是“栅栏柱的放置位置”。
一个 v[0..]vec![0, 1, 2 ,3]

|  0    1    2    3   |
^
|- You are slicing from here. This includes the
entire `Vec` (even if it was empty)
v[4..]它是
|  0    1    2    3   |
^
|- You are slicing from here to the end of the Vector.
Which results in, well, nothing.
而一个 v[5..]
|  0    1    2    3   |
^
|- Slicing from here to infinity is definitely
outside the `Vec` and, also, the
caller's fault, so panic!
和一个 v[3..]
|  0    1    2    3   |
^
|- slicing from here to the end results in `&[3]`

关于rust - 为什么我可以在 Rust 中从向量的末尾开始切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66073157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com