ship new libro learn language documentacion rust rust-cargo

new - rust language



MĂșltiples archivos de origen Rust para carga. (2)

Es difícil decir lo que te está pasando por la información que compartiste. Aquí hay tres cosas aparentemente triviales que aún tenía que referirme a la documentación para resolver:

Ante todo,

mod foo;

Parece una declaración, pero sin argumentos es en realidad algo así como una inclusión. Por lo tanto, utiliza la misma palabra clave para declarar e incluir módulos, es decir, no se usa :: keyword.

En segundo lugar, los módulos en sí pueden ser públicos o privados. Si no agregó una palabra clave de pub tanto en la función en cuestión Y en el módulo que lo contiene, es posible que se esté tropezando.

pub mod foo {pub fn bar();}

En tercer lugar, parece que se ha agregado un módulo implícito en la parte superior de cada archivo. Esto es confuso; El manual de referencia habla de una separación estricta entre las rutas de los archivos y los nombres, y las rutas de los módulos en su código, pero esa abstracción parece estar perdida.

Tenga en cuenta que Rust todavía es anterior a 1.0 (0.12) en el momento de escribir, en el sistema del módulo y las rutas de los archivos son de un nivel relativamente alto, así que no se sorprenda si lo que dije ya es incorrecto para cuando lea esto.

Si tengo varios archivos .rs en el directorio src de un paquete de Cargo, ¿cuáles son las reglas de visibilidad, importación, etc.?

Actualmente, cualquier archivo adicional (es decir, no el archivo que se identifica explícitamente como la fuente del ejecutable en Cargo.toml) se ignora.

¿Qué necesito hacer para arreglar esto?


No hay nada especial acerca de la carga de esta manera. Es todo el sistema de módulo Rust perfectamente normal. Si Cargo compilará src/lib.rs , eso es más o menos equivalente a haber ejecutado rustc --crate-type lib src/lib.rs (hay más argumentos en la línea de comandos en la práctica, pero eso es lo básico).

Otros archivos se utilizan con mod , use y así sucesivamente. Los archivos no se importan automáticamente ni nada de eso. Esta parte no está documentada muy claramente todavía; Un par de cosas que muestran brevemente cómo lograr cosas son http://rustbyexample.com/mod/split.html y http://doc.rust-lang.org/reference.html#modules , pero cualquier código no trivial base los usará y, por lo tanto, puede seleccionar casi cualquier base de código para ver ejemplos.