Несколько исходных файлов ржавчины для груза
Если у меня есть несколько файлов .rs
в каталоге src
пакета Cargo, каковы правила видимости, импорта и т.д.?
В настоящее время игнорируются любые дополнительные (то есть не файлы, которые явно указаны как исходные файлы для исполняемого файла в Cargo.toml).
Что мне нужно сделать, чтобы исправить это?
Ответы
Ответ 1
В этом нет ничего особенного в Cargo. Его полностью нормальная система модулей Rust. Если Cargo будет компилировать src/lib.rs
, это более или менее эквивалентно выполнению rustc --crate-type lib src/lib.rs
(на практике есть больше аргументов командной строки, но это основы его).
Другие файлы затем используются с mod
, use
и так далее. Файлы не импортируются автоматически или что-то в этом роде. Эта часть еще не задокументирована очень четко; несколько вещей, которые кратко показывают, как достичь результатов, http://rustbyexample.com/mod/split.html и http://doc.rust-lang.org/reference.html#modules, но любые нетривиальная база кода будет использовать их, и вы можете выбрать практически любую базу кода, чтобы посмотреть на примеры.
Ответ 2
Трудно сказать, от чего вы справляетесь, из информации, которую вы делили. Вот три, казалось бы, тривиальные вещи, которые я все еще должен был сослаться на документ, чтобы выяснить:
Прежде всего,
mod foo;
выглядит как объявление, но без аргументов это действительно что-то вроде include. Таким образом, вы используете одно и то же ключевое слово для объявления и включения модулей, т.е. Не используется ключевое слово::.
Во-вторых, сами модули могут быть общедоступными или частными. Если вы не добавили ключевое слово pub как на функцию, о которой идет речь, так и на содержащийся модуль, это может привести к отключению вас.
pub mod foo {pub fn bar();}
В-третьих, кажется, что неявный модуль добавлен в начало каждого файла. Это смущает; в справочном руководстве говорится о строгом разделении между путями файлов и именами и пути к модулю в вашем коде, но эта абстракция здесь кажется неаккуратной.
Примечание. На момент написания статьи Rust все еще пред-1.0 (0.12), в системе модуля и пути к файлам относительно высокий уровень, поэтому не удивляйтесь, если то, что я сказал, может быть уже неверным к моменту вашего чтения это.