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

如何在Rust中编写可同时接收Range和RangeInclusive参数的函数

实现方案

可以实现,Rust 标准库为所有区间类型(Range、RangeInclusive、RangeFrom 等)统一实现了 std::ops::RangeBounds 特征,你可以通过泛型约束或者 impl Trait 语法让同一个函数接收任意区间类型。

最简实现

use std::ops::RangeBounds;

// 用 impl RangeBounds 简化泛型写法
fn takes_range(range: impl RangeBounds<i32>) {
    // 处理区间逻辑,示例:迭代区间内的所有整数
    for num in range {
        println!("{}", num);
    }
}

fn main() {
    takes_range(0..5); // 左闭右开区间可正常调用
    takes_range(0..=5); // 闭区间也可正常调用
}

自定义边界处理

如果需要显式判断区间的开闭状态,可以通过 RangeBounds 提供的 start_bound()、end_bound() 方法配合 Bound 枚举处理:

use std::ops::{Bound, RangeBounds};

fn takes_range(range: impl RangeBounds<i32>) {
    match range.start_bound() {
        Bound::Included(&val) => println!("左边界包含值:{}", val),
        Bound::Excluded(&val) => println!("左边界排除值:{}", val),
        Bound::Unbounded => println!("左边界无上限"),
    }

    match range.end_bound() {
        Bound::Included(&val) => println!("右边界包含值:{}", val),
        Bound::Excluded(&val) => println!("右边界排除值:{}", val),
        Bound::Unbounded => println!("右边界无下限"),
    }
}

注意事项

如果你的业务场景需要处理无界区间(比如 ..10、5.. 这类写法),不要直接迭代无界区间,否则会造成无限循环。

内容的提问来源于stack exchange,提问作者hardboiled65

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:27:00