繁体   English   中英

为什么这个 rand use 语句在 rust 中有效?

[英]Why does this rand use statement work in rust?

按照 Rust 书中的示例使用其建议的rand = "0.6.0" ,我得到如下代码:

use rand::Rng;

fn main() {
    let secret_number = rand::thread_rng().gen_range(1, 101);

    println!("The secret number is: {}", secret_number);
}

本书后面关于模块的章节中所说的一切都表明,如果你use rand::Rng; 如上所述,您将能够使用Rng 如果这恰好是一个模块本身,您可以使用带有Rng::submodule的子模块。 如果这恰好是一种类型,则只需将其用作Rng 然而,在上面的代码中,我们从不在任何地方使用Rng

相反,我们使用看似无关的rand::thread_rng() 据我了解,由于rand是顶级 crate 的名称,我们应该能够使用它,即使没有似乎没有做任何事情的use语句。

相反,由于某种原因,如果没有use语句,程序将无法编译。 这真的很令人困惑。 我希望这本书能更好地解释那里发生的事情。

为什么我们需要 use 语句? 为什么我们不使用Rng 它与rand::thread_rng()有什么关系?

我来自 Python 背景,所以我习惯这样的想法,如果你导入threading ,你正在使用threading.something 如果您导入django.utils ,则您使用的是django.utils.something 这似乎是django.utils的导入,您使用的是完全不相关的django.urls

除非特征在 scope 中,否则不能调用特征方法。

然而,在上面的代码中,我们从不在任何地方使用Rng

您正在使用Rng gen_range()是由Rng特征定义的特征方法,因此Rng必须在 scope 中才能调用gen_range()

细节: rand::thread_rng()返回实现ThreadRngRngCore并获得Rng实现,因为 R 的通用毯子 impl impl<R> Rng for R where R: RngCore +?Sized

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM