Я новичок в Rust. Я думаю, что use
используется для импорта идентификаторов в текущую область, а extern
используется для объявления внешнего модуля. Но это понимание (может быть, неправильное) не имеет для меня никакого смысла. Может ли кто-нибудь объяснить, почему у Rust есть эти две концепции и каковы подходящие случаи для их использования?
Какая разница между использованием и внешним?
Ответ 1
extern crate foo
указывает, что вы хотите связать с внешней библиотекой, и вводит имя ящика верхнего уровня в область видимости (use foo
). Начиная с Rust 2018, в большинстве случаев вам больше не нужно будет использовать extern crate
, потому что Cargo информирует компилятор о наличии ящиков. (Есть одно или два исключения)
use bar
- это сокращение для ссылки на полностью определенные символы.
Теоретически язык не нуждается в use
- вы всегда можете просто полностью квалифицировать имена, но ввод std::str::String.new(...)
будет очень утомительным! Вместо этого вы можете просто набрать use std::str::String
один раз, и тогда String
будет ссылаться на это. (оператор use
для String
является частью прелюдии, поэтому вы обычно этого не видите)
Ответ 2
Принятый ответ был правильным на момент написания. Это однако больше не правильно. extern crate
практически не нужен с Rust 2018.
Теперь вам нужно только добавить внешние зависимости в ваш Cargo.toml.
use
работает так же, как и раньше.
Подробнее читайте в официальной документации.
Изменение: принятый ответ был отредактирован, чтобы правильно отразить изменения в Rust 2018.