gpt4 book ai didi

syntax - 为什么从字符串长度开始的切片不会 panic ?

转载 作者:行者123 更新时间:2023-11-29 07:47:32 25 4
gpt4 key购买 nike

fn main() {
let s = String::from("hello");
let hello = &s[5..];
println!("{}", hello);
}

为什么这段代码运行起来没有 panic ?我认为这是索引超出内容大小的情况。此代码示例的输出未显示任何内容。

最佳答案

Rust 中的范围不包括上限(除非您使用 ..= 范围构造函数)。这意味着像 2..2 这样的范围是零长度:“从 2 开始并将每个元素取到,但不包括 2”。当长度为5时,5..55..是等价的。

虽然从最后一个元素开始一个范围似乎没有多大意义,但这样做很方便。例如,如果您采用不断缩小的范围:

for i in 0 .. s.len() + 1 {
println!("slice = {:?}", &s[i ..]);
}

输出:

slice = "hello"
slice = "ello"
slice = "llo"
slice = "lo"
slice = "o"
slice = ""

如果您必须单独处理最后一个空切片,情况会很烦人。

但是超过数据长度引起 panic 。当字符串的长度为 5 时,您没有理由故意编写 s[6..6]

关于syntax - 为什么从字符串长度开始的切片不会 panic ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035619/

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