【问题标题】:Why can't I call gen_range with two i32 arguments?为什么我不能用两个 i32 参数调用 gen_range ?
【发布时间】:2021-04-02 12:22:24
【问题描述】:

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

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

【问题讨论】:

  • 欢迎来到 StackOverflow!不幸的是,你的问题相当模糊。请包括什么不起作用,例如任何编译器或运行时错误消息或错误和预期值。请edit您的帖子。也看看stackoverflow.com/help/how-to-ask。 :)
  • gen_range() 方法不起作用
  • “gen_range() 方法不起作用”仍然含糊不清,因为不清楚程序是否根本无法编译或行为是否意外。然后,潜在的回答者需要采取额外的步骤,这可能会延长您的问题得到回答的时间。您可能希望在以后的问题中记住这一点。

标签: function random methods rust numbers


【解决方案1】:

运行货物更新 它将列出 rand 的版本。

在依赖项下更新 Cargo.toml 中的版本

[依赖项] 兰德=“0.8.3”

希望这能解决上述问题

【讨论】:

    【解决方案2】:

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

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

    到:

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

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

    【讨论】:

    • 或一个包容性的.gen_range(0..=100),我个人更喜欢它的可读性。
    • @ismailshah 如果我的回答解决了您的问题,请点击答案分数下方的灰色复选标记接受它,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2011-09-17
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多