【问题标题】:can't find gen_range method on rand::thread_rng [duplicate]在 rand::thread_rng 上找不到 gen_range 方法 [重复]
【发布时间】:2020-06-08 06:33:04
【问题描述】:

我停留在 Rust 书中给出的第一个例子,猜谜游戏。我只是在thread_rng() 上找不到gen_range 方法来生成数字。出现的唯一方法是fill_bytesnext_u32next_u64try_fill_bytes,如果我仍然尝试编写它,我会收到一条错误消息,指出该方法不存在。但是,当我尝试随机函数时,根据文档,它只是thread_rng().gen() 的快捷方式,它可以工作。我尝试了其他功能,更新并重新安装了所有内容,但仍然无法正常工作,我真的不知道该怎么办。

【问题讨论】:

  • 你需要导入定义thread_rng()的trait - 在顶部添加use rand::Rng;

标签: rust


【解决方案1】:

欢迎来到 Stack Overflow。以后,请尝试在您的问题中添加更多信息,包括相关链接(您在说哪个文档)、源代码和错误消息。这将使我们更容易提供相关且有用的答案。

我假设你正在做这样的事情:

use rand::thread_rng;

fn main() {
    let x = thread_rng().gen_range(0, 10);
    println!("{}", x);
}

Playground

这给出了以下错误:

error[E0599]: no method named `gen_range` found for struct `rand::rngs::thread::ThreadRng` in the current scope
   --> src/main.rs:4:26
    |
4   |     let x = thread_rng().gen_range(0, 10);
    |                          ^^^^^^^^^ method not found in `rand::rngs::thread::ThreadRng`
    | 
   ::: /playground/.cargo/registry/src/github.com-1ecc6299db9ec823/rand-0.7.3/src/lib.rs:212:8
    |
212 |     fn gen_range<T: SampleUniform, B1, B2>(&mut self, low: B1, high: B2) -> T
    |        ---------
    |        |
    |        the method is available for `std::boxed::Box<rand::rngs::thread::ThreadRng>` here
    |        the method is available for `std::sync::Arc<rand::rngs::thread::ThreadRng>` here
    |        the method is available for `std::rc::Rc<rand::rngs::thread::ThreadRng>` here
    |
    = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
    |
1   | use rand::Rng;
    |

请注意,Rust 编译器非常擅长为修复代码的方法提供建议。在这种情况下,错误的最后一行建议添加use rand::Rng;,现在它可以工作了:

use rand::Rng;
use rand::thread_rng;

fn main() {
    let x = thread_rng().gen_range(0, 10);
    println!("{}", x);
}

Playground

这是因为gen_range 方法没有直接在ThreadRng 结构上实现,而是在通用Rng 特征中实现,这使得它自动可用于所有随机数生成器。然而,trait 中的方法只有在 trait 本身可用时才可用,因此需要先导入 rand::Rng

【讨论】:

  • 嗨。谢谢,它现在可以工作了,很抱歉缺乏信息。我正在谈论的文档是这个docs.rs/rand/0.7.3/rand/fn.random.html。我不得不承认,我什至没有尝试运行代码是我的错,我所说的错误是出现在 vscode 上的红线,但由于我使用的是 RLS 的扩展,我认为它是正确的并且没有甚至尝试运行。我的错。此外,这本书 (doc.rust-lang.org/stable/book/…) 直到现在(也许稍后?)都没有提到这种情况,所以我有点恐慌。再次感谢。
【解决方案2】:

您可以尝试安装以下版本,在这个版本中对我有用。

将此添加到您的 Cargo.toml 依赖项中:

rand = "0.7.3"

进口:

use rand::Rng;

用法:

rand::thread_rng().gen_range(0, 10);

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2017-05-22
    • 2020-11-13
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多