Naprawdę nie mogę znaleźć sposobu włączenia (lub importu, wstrzyknięcia lub czegoś) z jednego pliku (modułu) do drugiego.Podstawowe importowanie rdzeni (obejmuje)
Oto przykład.
zaczynam nowy projekt z
cd ~/projects
cargo new proj --bin
cd proj
tree
# output
.
|
-- Cargo.toml
-- src
|
-- main.rs
Potem modyfikować main.rs
i utworzyć nowy plik a.rs
(wewnątrz src
dir) za pomocą następującego kodu:
// main.rs
fn main() { println!("{}", a::foo()); }
// a.rs
pub fn foo() -> int { 42i }
uruchomić projekt z cargo run
Tutaj mam dwa błędy:
- src/main.rs: 2: 20: 2:26 błąd: nie udało się rozwiązać. Użycie niezadeklarowanego modułu
a
- src/main.rs: 2: 20: 2:26 błąd: nierozwiązana nazwa
a::foo
.
W tej chwili wydaje się dość oczywiste, po prostu muszę importować a
jakoś.
Próbowałem dodać następujące rzeczy jako pierwsza linia do main.rs
use a;
-> Błąd: nierozwiązana import (? Może chodziłoa::*
)use a::*;
-> Błąd: glob instrukcje importu są eksperymentalne i prawdopodobnie buggyuse a::foo;
-> błąd: nierozstrzygnięty importa::foo
. Może brakująceextern crate a
?extern crate a; use a::foo;
-> Błąd: nie można odnaleźć skrzynię dlaa
extern crate proj; use proj::a::foo;
-> Błąd: nie można odnaleźć skrzynię dlaproj
Czytałem the guide at rust-lang ale nadal nie można dowiedzieć się, jak to zrobić importu .
Kiedy zatem konieczna jest skrzynka zewnętrzna? Myślałem, że każdy plik Rusta jest oddzielną skrzynką (jednostką kompilacji). – voithos
@voithos Twoje main.rs lub lib.rs i wszystkie pliki rekursywnie odwracające się za pomocą instrukcji 'mod' zostaną skompilowane jako skrzynia. To jest jednostka kompilacji. – Levans
'ale wszelkie zmiany w systemie modułowym zostaną odrzucone jako" zbyt mylące "' Istniejący system modułów jest "zbyt zagmatwany". – Qix