機能の途中でuse
文が許可されていますか?マクロ内で型をインポートするにはどうすればよいですか?
もしそうなら、どのように私はモジュールを参照してください(self
?super
?フルパス?)
、私は唯一のマクロを呼んでいるファイルに構造体/列挙型とマクロをインポートされていない場合オプション?
機能の途中でuse
文が許可されていますか?マクロ内で型をインポートするにはどうすればよいですか?
もしそうなら、どのように私はモジュールを参照してください(self
?super
?フルパス?)
、私は唯一のマクロを呼んでいるファイルに構造体/列挙型とマクロをインポートされていない場合オプション?
は許さ機能の途中で
use
-statementsていますか?
もしそうなら、どのように私はモジュールを参照してください(
self
?super
?フルパス?)[コメントから]どのように私はどのマクロモジュールを参照してくださいタイプは?で定義されていますか?
AFAIKこれは実際には不可能です。唯一の希望は、マクロを定義したクレートを指し特別$crate
メタ変数であるしたがって、あなたがとのように、あなたはを参照したいタイプの全体のパスを指定することができます:。
use $crate::path::to::MyType;
このタイプは、あなたのマクロを使用する他の箱でアクセスできるように公開されている必要があります。これは、型があなたのクレートのパブリックインターフェイスに属し、そのパスを変更することが大きな変化とみなされることを意味します。改行の変更はまれに起こるはずなので、マクロ定義のパスを頻繁に変更する必要はありません;-)
機能内でuse
をそのまま使用できます。たとえば、
fn foo() {
// do some other stuff
use std::collections::HashMap; // use statement only valid
// inside the current scope
// use HashMap
}
use
ステートメントは常にクレートルートに対して絶対的です。次のように現在のモジュールとの相対的な関係にすることができます:use self::submodule::Type
これはまたdocumented in the Rust bookです。
*機能の途中での使用文が許可されています*その質問に要するよりも少ない文字で書かれています。 – Shepmaster
私はしましたが、それはうまくいかなかったし、なぜマクロに入っていたのかわからなかったし、エラーはちょっとだったと思います。これを尋ねた後、私は2つのステートメントを半角括弧で囲み、それがうまくいった(私が思うような表現になった) –