2016-12-31 80 views
1

use - 函數中間的語句允許嗎?如何在宏內導入類型?

如果是這樣,我怎麼參閱模塊(selfsuper?完整路徑?)

如果沒有,則輸入一個struct /枚舉和宏文件在我調用宏只選項?

+0

*在允許的函數中間使用了語句* - 你幾乎可以嘗試這個,很可能用更少的字符來提出問題。 – Shepmaster

+0

我做了,但它沒有工作,我不知道爲什麼,因爲它是在一個宏,我認爲這個錯誤是有點關閉。問了這個問題之後,我用2個括號將2條語句包裝起來了,它起作用了(所以它成了我想的表達式) –

回答

4

use - 函數中間的語句允許嗎?

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