首页 > 解决方案 > 为什么我不能用两个 i32 参数调用 gen_range ?

问题描述

我有这段代码,但它没有编译:

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);
}

编译错误:

error[E0061]: this function takes 1 argument but 2 arguments were supplied
 --> src/main.rs:7:44
  |
7 |     let secret_number = rand::thread_rng().gen_range(0, 101);
  |                                            ^^^^^^^^^ -  --- supplied 2 arguments
  |                                            |
  |                                            expected 1 argument

标签: functionrandommethodsrustnumbers

解决方案


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

let secret_number = rand::thread_rng().gen_range(0, 101);

至:

let secret_number = rand::thread_rng().gen_range(0..101);

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


推荐阅读