Rust中如何安全截取slice子切片,操作失败返回Option?
Rust 安全截取子切片的实现方式
在Rust中,你可以对slice、vector等类型执行子切片截取操作,常规写法如下:
fn main() { let a = vec![0; 6]; let b = &a[0..2]; println!("{:?}", b); }
但当传入的切片范围超出原数据长度时,该操作会直接触发panic。
答案是肯定的,Rust标准库内置了不会panic的安全截取方法,不需要手动写边界判断逻辑:
- 直接调用切片/Vector的
get方法,传入你要截取的索引范围即可,该方法返回值就是Option类型:- 索引范围合法时,返回
Some(目标子切片的引用) - 索引范围越界、不合法时,直接返回
None,全程不会触发panic
- 索引范围合法时,返回
- 用法示例:
fn main() { let a = vec![0; 6]; // 截取合法范围 let valid_res = a.get(0..2); println!("合法范围截取结果:{:?}", valid_res); // 输出 Some([0, 0]) // 截取越界范围 let invalid_res = a.get(10..20); println!("越界范围截取结果:{:?}", invalid_res); // 输出 None }
补充:如果只需要获取单个元素而非连续子切片,
get方法也支持直接传入单个usize类型的索引,行为逻辑完全一致,索引合法返回Some(元素引用),越界返回None。
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

