为什么我不能用两个 i32 参数调用 gen_range?

ism*_*hah 3 random methods numbers function rust

我有这个代码,但它不能编译:

use rand::Rng;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(0, 101);
    println!("The secret number is: {}", secret_number);

    println!("Please input your guess.");
    let mut guess = String::new();
    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");
    println!("You guessed: {}", guess);
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

use rand::Rng;
use std::io;

fn main() {
    println!("Guess the number!");

    let secret_number = rand::thread_rng().gen_range(0, 101);
    println!("The secret number is: {}", secret_number);

    println!("Please input your guess.");
    let mut guess = String::new();
    io::stdin()
        .read_line(&mut guess)
        .expect("Failed to read line");
    println!("You guessed: {}", guess);
}
Run Code Online (Sandbox Code Playgroud)

kfe*_*v91 11

gen_range方法需要一个Range参数,而不是两个i32参数,因此更改:

let secret_number = rand::thread_rng().gen_range(0, 101);
Run Code Online (Sandbox Code Playgroud)

到:

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

它会编译并工作。注意:方法签名已在crate版本0.8.0中更新,在randcrate 的所有先前版本中,您的代码应按原样工作。

  • @ismailshah 如果我的答案解决了您的问题,请通过单击答案分数下的灰色复选标记来接受它,谢谢! (3认同)
  • 或包含性的 `.gen_range(0..=100)`,我个人更喜欢它的可读性。 (2认同)