You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:18:17