Dengan mengikuti panduan ini saya membuat proyek Cargo.
src/main.rs
fn main() {
hello::print_hello();
}
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
yang saya jalankan menggunakan
cargo build && cargo run
dan dikompilasi tanpa kesalahan. Sekarang saya mencoba untuk membagi modul utama menjadi dua tetapi tidak dapat menemukan cara menyertakan modul dari file lain.
Pohon proyek saya terlihat seperti ini
├── src
├── hello.rs
└── main.rs
dan konten file:
src/main.rs
use hello;
fn main() {
hello::print_hello();
}
src/hello.rs
mod hello {
pub fn print_hello() {
println!("Hello, world!");
}
}
Ketika saya mengkompilasinya dengan cargo build
saya dapatkan
error[E0432]: unresolved import `hello`
--> src/main.rs:1:5
|
1 | use hello;
| ^^^^^ no `hello` external crate
Saya mencoba mengikuti saran penyusun dan memodifikasi main.rs
menjadi:
#![feature(globs)]
extern crate hello;
use hello::*;
fn main() {
hello::print_hello();
}
Tapi ini masih tidak banyak membantu, sekarang saya mengerti:
error[E0463]: can't find crate for `hello`
--> src/main.rs:3:1
|
3 | extern crate hello;
| ^^^^^^^^^^^^^^^^^^^ can't find crate
Apakah ada contoh sepele tentang bagaimana memasukkan satu modul dari proyek saat ini ke dalam file utama proyek?
Jawaban:
Anda tidak perlu
mod hello
dihello.rs
file Anda . Kode dalam file apa pun kecuali akar peti (main.rs
untuk file yang dapat dieksekusi,lib.rs
untuk perpustakaan) secara otomatis diberi spasi dalam modul.Untuk memasukkan kode dari
hello.rs
dalam Andamain.rs
, gunakanmod hello;
. Itu diperluas ke kode yang adahello.rs
(persis seperti yang Anda miliki sebelumnya). Struktur file Anda tetap sama, dan kode Anda perlu sedikit diubah:main.rs
:hello.rs
:sumber
use
hanyalah sebuah namespace, sementaramod
menarik file tersebut. Anda akan menggunakanuse
, misalnya, untuk dapat memanggilprint_hello
fungsi tanpa harusJika Anda ingin memiliki modul bersarang ...
Karat 2018
Ini tidak lagi diperlukan untuk memiliki file
mod.rs
(meskipun masih didukung). Alternatif idiomatik adalah memberi nama file dengan nama modul:main.rs
my.rs
Karat 2015
Anda perlu meletakkan
mod.rs
file di dalam folder Anda dengan nama yang sama dengan modul Anda. Rust by Example menjelaskannya dengan lebih baik.main.rs
mod.rs
sumber
inaccessible.rs
dalamnested.rs
... bagaimana saya melakukannya?#[path = "inaccessible.rs"]
dan di baris berikutnya:mod inaccessible;
mod inaccessible;
kemy/mod.rs
membuatnya menjadi submodulmy
, lalu akses modul saudara darinested.rs
jalur relatifsuper::inaccessible::function()
. Anda tidak membutuhkanpath
atribut di sini.Saya sangat menyukai tanggapan Gardener. Saya telah menggunakan saran untuk deklarasi modul saya. Seseorang mohon bergabung jika ada masalah teknis dengan ini.
main.rs
utils / thing.rs
other_utils / other_thing.rs
sumber
fn
dengan nama yang sama dengan file itu masuk#[path = "./add_offer.rs"] mod _add_offer; pub use self::_add_offer::add_offer;