如何将 RangeInclusive 转换为 Range?

PiR*_*cks 5 range rust

显然我可以做这样的事情:

impl From<RangeInclusive<u32>> for Range<u32>{
    fn from(r: RangeInclusive<u32>) -> Self {
        (*r.start()..(r.end()+1))
    }
}

Run Code Online (Sandbox Code Playgroud)

但是我想知道是否已经有一个标准函数?(快速谷歌后我无法在文档/中找到任何内容)。如果不是,如何为每个 num 类型实现这一点,并且这样的实现是否会受到 Rust 的欢迎,或者是否有一个原因尚未实现?

tre*_*tcl 7

并非每个都RangeInclusive可以转换为 a ,这是存在的Range主要原因。RangeInclusive例如,0u32..=u32::MAX无法转换为,Range<u32>因为u32::MAX + 1超出了 的范围u32

可以想象Range<u32>可以实现TryFrom<RangeInclusive<u32>>,但这种转换很少是必要的。您通常应该使用RangeBounds.