Ich versuche, einen Prozedurmakro zu schreiben, der eine #[derive()]
Eigenschaft für eine Struktur implementiert. Im generierten Implementierungscode muss ich AnyMap
verwenden.Eine Kiste in einen Const-Block importieren
Um Multi-Kiste-Importe zu vermeiden, und basierend auf dem, was ich im Code einiger anderer Kisten (nämlich Serde) gelesen habe, habe ich meinen generierten Code in einen const _IMPL_xxx_FOR_xxx :() = { /* generated code */ };
Block geschrieben, aber es kompiliert nicht.
konnte ich mein Problem mit dem folgenden Code
const BLOCK_1:() = {
extern crate anymap;
use anymap::AnyMap;
};
const BLOCK_2:() = {
extern crate anymap;
use anymap::AnyMap;
};
fn main() {
println!("foo");
}
Der Compiler-Fehler replizieren ich bin immer ist die folgende:
error[E0432]: unresolved import `anymap::AnyMap`
--> src/main.rs:3:9
|
3 | use anymap::AnyMap;
| ^^^^^^^^^^^^^^ Maybe a missing `extern crate anymap;`?
error[E0432]: unresolved import `anymap::AnyMap`
--> src/main.rs:9:9
|
9 | use anymap::AnyMap;
| ^^^^^^^^^^^^^^ Maybe a missing `extern crate anymap;`?
Ist es ein Problem, die spezifisch für AnyMap
? Würden Sie von irgendeiner Weise wissen, dass dies (einschließlich vielleicht einen anderen Ansatz zu beheben, um prozedurale Makrocode zu erzeugen, wenn das Muster Ich verwende nicht empfohlen?
Danke für diese Elemente @Djzin. Wenn also die Verwendung tatsächlich unterbrochen wird, was ist dann der beste Weg, um Importe zu verwalten, wenn Sie prozedurale Makros verwenden? – Boris
Eine Sache, die Sie tun können, ist, Ihren Code in ein Modul zu setzen, und dann können Sie mit 'use self :: anymap :: Anymap" importieren. Sie können das Modul immer noch in die Constélaration setzen – Djzin
Danke. Ich werde es versuchen – Boris