Rust 在一组&str上使用BTreeSet::range时需要类型批注

Rust 在一组&str上使用BTreeSet::range时需要类型批注,rust,set,range,binary-tree,type-inference,Rust,Set,Range,Binary Tree,Type Inference,我在使用BTreeSet::range方法时遇到了一些问题 使用std::collections::BTreeSet; 使用std::ops::Bound::include; fn干线{ 让set=BTreeSet::new; set.insertTEST1; set.insertTEST3; set.insertTEST4; set.insertTEST2; set.insertTEST5; 设bound=IncludedTEST3,IncludedTEST4; 设rg=set.rangebo

我在使用BTreeSet::range方法时遇到了一些问题

使用std::collections::BTreeSet; 使用std::ops::Bound::include; fn干线{ 让set=BTreeSet::new; set.insertTEST1; set.insertTEST3; set.insertTEST4; set.insertTEST2; set.insertTEST5; 设bound=IncludedTEST3,IncludedTEST4; 设rg=set.rangebound; println!结果:{:?},rg; } 编译器抱怨:

错误[E0283]:需要类型批注:无法解析“\:std::cmp::Ord”` ->src/main.rs:14:18 | 14 |设rg=set.rangebound; | ^^^^^
这是否意味着&str不能相互比较?

通过..构建范围。。exclusive end or..=包含的end运算符,例如,对于0..3中的i,表示0、1、2。与之相反,0中的i..=3表示0、1、2、3

要解决您的问题,您可以指定一个包含范围:

use std::collections::BTreeSet;

fn main() {
    let mut set = BTreeSet::new();

    set.insert("TEST1");
    set.insert("TEST3");
    set.insert("TEST4");
    set.insert("TEST2");
    set.insert("TEST5");

    let rg = set.range("TEST3"..="TEST4");

    println!("result: {:?}", rg);
}
哪个会打印

结果:范围{iter:[TEST3,TEST4,]}
通过..构建范围。。exclusive end or..=包含的end运算符,例如,对于0..3中的i,表示0、1、2。与之相反,0中的i..=3表示0、1、2、3

要解决您的问题,您可以指定一个包含范围:

use std::collections::BTreeSet;

fn main() {
    let mut set = BTreeSet::new();

    set.insert("TEST1");
    set.insert("TEST3");
    set.insert("TEST4");
    set.insert("TEST2");
    set.insert("TEST5");

    let rg = set.range("TEST3"..="TEST4");

    println!("result: {:?}", rg);
}
哪个会打印

结果:范围{iter:[TEST3,TEST4,]}
编译器无法从包含的参数推断range函数的第一个泛型参数K:Ord

您需要明确指定它:

设rg=set.range::bound; 为什么编译器不能推断第一个泛型参数? 它确实推断出了类型,但是K有两种候选类型:它可以是&'static str或str。Rust无法确定使用哪一种

让我们分析range方法的定义,解释Rust无法选择其中一种方法的原因


pub fn range&self,range:R->range,Bound编译器无法从包含的参数推断range函数的第一个泛型参数K:Ord

您需要明确指定它:

设rg=set.range::bound; 为什么编译器不能推断第一个泛型参数? 它确实推断出了类型,但是K有两种候选类型:它可以是&'static str或str。Rust无法确定使用哪一种

让我们分析range方法的定义,解释Rust无法选择其中一种方法的原因


pub fn range&self,range:R->range,Bound为什么它可以推断RangeInclusive的类型,而不能推断绑定的元组的类型?@hellow感谢您提供了另一种语法。我有很多东西要发现!为什么它可以推断RangeInclusive的类型,而不能推断绑定元组的类型?@hellow感谢您提供了另一种语法。我有很多东西要发现!