首页 > 解决方案 > 在 Rust 中,当向量 v 的大小为 1 时,为什么 &v[1..] 不恐慌?

问题描述

Programming Rust, 2nd Edition的gcd 示例中,为什么不会导致语句中出现越界错误&numbers[1..]

for m in &numbers[1..]

当向量的大小为一时numbers?不numbers[1]解决第二个元素,它是向量末尾之外的一个元素?

例如,我预计gcd 45会恐慌,但它报告的最大公约数是 45:

ubuntu@development1:~/Documents/projects/rust/programming_in_rust/examples/gcd$ cargo run 45
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/gcd 45`
The greatest common divisor of [45] is 45

标签: vectorrustrangeslice

解决方案


因为医生这样说:

如果 begin 不指向字符的起始字节偏移量(由 is_char_boundary 定义),或者如果 begin > len,则发生恐慌。来源

由于 len1在您的情况下1..不会惊慌并返回一个空切片。相当于1..1你的情况。


推荐阅读