2016-12-31 7 views
1

機能の途中でuse文が許可されていますか?マクロ内で型をインポートするにはどうすればよいですか?

もしそうなら、どのように私はモジュールを参照してください(selfsuper?フルパス?)

、私は唯一のマクロを呼んでいるファイルに構造体/列挙型とマクロをインポートされていない場合オプション?

+0

*機能の途中での使用文が許可されています*その質問に要するよりも少ない文字で書かれています。 – Shepmaster

+0

私はしましたが、それはうまくいかなかったし、なぜマクロに入っていたのかわからなかったし、エラーはちょっとだったと思います。これを尋ねた後、私は2つのステートメントを半角括弧で囲み、それがうまくいった(私が思うような表現になった) –

答えて

4

は許さ機能の途中でuse -statementsていますか?

Yes.

もしそうなら、どのように私はモジュールを参照してください(selfsuper?フルパス?)

[コメントから]どのように私はどのマクロモジュールを参照してくださいタイプは?で定義されていますか?

AFAIKこれは実際には不可能です。唯一の希望は、マクロを定義したクレートを指し特別$crateメタ変数であるしたがって、あなたがとのように、あなたはを参照したいタイプの全体のパスを指定することができます:。

use $crate::path::to::MyType; 

このタイプは、あなたのマクロを使用する他の箱でアクセスできるように公開されている必要があります。これは、型があなたのクレートのパブリックインターフェイスに属し、そのパスを変更することが大きな変化とみなされることを意味します。改行の変更はまれに起こるはずなので、マクロ定義のパスを頻繁に変更する必要はありません;-)

1

機能内で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です。

関連する問題