Rust:错误 [E0277]:不满足特征边界 `{integer}: SampleRange<_>`

4 rust

我有一行代码在 for 循环中,它应该生成一个从 0 到 2499 的随机数。这给我带来了问题。

let index = rand::thread_rng().gen_range(2499);
Run Code Online (Sandbox Code Playgroud)

对于那些想知道的人来说完整的代码:

fn generate_phrase () -> String {
let mut phrase = String::new();
let mut file = File::open("words.txt").expect("Failed to open words.txt");
let mut contents = String::new();
file.read_to_string(&mut contents).expect("Failed to read words.txt");
let words: Vec<&str> = contents.split("\n").collect();
for _ in 0..8 {
    let index = rand::thread_rng().gen_range(2499);
    phrase.push_str(words[index]);
    phrase.push(' ');
}
println!("Your phrase is: {:?}", phrase);
return phrase;
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

error[E0277]: the trait bound `{integer}: SampleRange<_>` is not satisfied
   --> src/crypto/crypto.rs:115:45
    |
115 |    let index = rand::thread_rng().gen_range(2499);
    |                                   --------- ^^^^ the trait `SampleRange<_>` is not implemented for `{integer}`
    |                                   |
    |                                   required by a bound introduced by this call
    |
note: required by a bound in `gen_range`
   --> C:\Users\Administrator\.cargo\registry\src\github.com-1ecc6299db9ec823\rand-0.8.5\src\rng.rs:132:12
    |
132 |         R: SampleRange<T>
    |            ^^^^^^^^^^^^^^ required by this bound in `gen_range
Run Code Online (Sandbox Code Playgroud)

我知道问题所在,即该特征不是正确的类型,但我不知道如何将整数转换为必要的特征:SampleRange<T>。我查看了 StackOverFlow,但在任何地方都找不到合适的答案。

Jer*_*ows 9

SampleRange抱怨的 可以是 aRangeRangeInclusive,而不仅仅是一个上限(请参阅 中的“实现”部分SampleRange以了解哪些类型实现了该特征)。您所需要做的就是将这一行更改为如下所示:

let index = rand::thread_rng().gen_range(0..2499);
Run Code Online (Sandbox Code Playgroud)