Soy nuevo en Rust. Creo que use
se usa para importar identificadores al alcance actual y extern
se usa para declarar un módulo externo. Pero esta comprensión (tal vez incorrecta) no tiene ningún sentido para mí. ¿Alguien puede explicar por qué Rust tiene estos dos conceptos y cuáles son los casos adecuados para usarlos?
81
extern crate foo;
? Las cajas y los módulos son conceptos separados en Rust, es posible que desee echar un vistazo a "Terminología básica: cajas y módulos" que explica la diferencia entre los dos (aunque personalmente encuentro los ejemplos a continuación demasiado detallados).Respuestas:
extern crate foo
indica que desea vincular con una biblioteca externa y trae el nombre de la caja de nivel superior al alcance (equivalente ause foo
). A partir de Rust 2018, en la mayoría de los casos no necesitará usarextern crate
más porque Cargo informa al compilador sobre qué cajas están presentes. (Hay una o dos excepciones )use bar
es una forma abreviada de hacer referencia a símbolos completos.Teóricamente, el idioma no es necesario
use
: siempre puedes calificar completamente los nombres, ¡pero escribirstd::collections::HashMap.new(...)
sería muy tedioso! En su lugar, solo puede escribiruse std::collections::HashMap
una vez y luegoHashMap
se referirá a eso.fuente
use
, ni siquiera podríamos tenerstd
la fachada que es. O tendríamos una única caja de biblioteca estándar monolítica, o todos estarían lidiando con el hecho de que enString
realidad lo escollections::string::String
.La respuesta aceptada era correcta al momento de escribir este artículo. Sin embargo, ya no es correcto.
extern crate
casi nunca se necesita desde Rust 2018.Ahora solo debe agregar dependencias externas a su Cargo.toml.
use
funciona igual que antes.Leer más en la documentación oficial .
Editar: la respuesta aceptada ahora se ha editado para reflejar correctamente los cambios en Rust 2018.
fuente
extern crate failure;
perouse std::error::Error