使用和外部箱之间有什么区别?(这是一个关于IT技术的问题)

191

我认为use关键字用于将标识符导入当前作用域,而extern crate用于声明外部模块。但是这种理解(可能是错误的)对我来说没有意义。有人可以解释一下为什么Rust有这两个概念以及什么情况下适合使用它们吗?


11
你是在指 extern crate foo; 语句吗?在 Rust 中,Crate 和 Module 是不同的概念,你可能想看一下 "基本术语:Crates 和 Modules" 这篇文章,它解释了这两者之间的区别(尽管我个人认为下面的示例过于详细)。 - Qantas 94 Heavy
2个回答

199

extern crate foo 表示你想链接到一个外部库,将顶层箱名引入作用域(相当于 use foo)。截至 Rust 2018,在大多数情况下,你不再需要使用extern crate,因为 Cargo 会通知编译器哪些箱存在。(有一两个例外)

use bar是一种简写方式,可以引用完全合格的符号。

理论上,语言不需要 use —— 你总是可以完全限定名称,但输入 std::collections::HashMap.new(...) 将变得非常繁琐!相反,你只需键入 use std::collections::HashMap 一次,然后 HashMap 就会引用它。


7
如果没有use,我们甚至不能像现在这样使用std。要么我们只有一个庞大的标准库crate,要么每个人都会处理String实际上是collections::string::String这个事实。请注意不改变原文意思,尽量让翻译通俗易懂。 - user395760

124
自 Rust 2018 版本起,你只需要将外部依赖添加到你的 Cargo.toml 中,所以你不再需要使用 extern crate foo 了。 use 的用法与之前相同。在官方文档中了解更多信息。

1
即使不是必需的,将外部 crate 与标准 crate 分开是否有好处?例如 extern crate failure; 但是 use std::error::Error - Paul Razvan Berg
3
你的意思是澄清哪些导入是来自标准库,哪些是外部导入吗?至少对我来说不是,我也不认为这是推荐的做法。但我认为你应该按照最有意义的方式组织你的代码。 - dropbear
use works the same as before”是什么意思,指的是以前哪个时候?你是指另一个答案中的“before”吗? - nbro
@nbro 我的意思是在 Rust 2018 之前。 - dropbear

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接