2015-06-04 54 views
4

我在一個模塊中定義了一個宏,它工作正常。 現在,我試圖用一個例子來記錄所說的宏。 Apparently,我需要手動指定箱子線索要宏:如果在模塊中定義宏,我該如何正確編寫宏文檔?

/// ``` 
/// # #[macro_use] extern crate foo; 
/// // Some code 
/// ``` 

不過,現在我得到一個錯誤說:

error: an `extern crate` loading macros must be at the crate root 

顯然,示例代碼在宏的模塊加載,似乎不兼容macro_use ...

我不能相信每個人都直接在根模塊中寫入宏...對吧?

回答

2

那麼添加一個主要功能的伎倆。我的示例代碼不需要運行任何東西(只是編譯),所以我甚至不打算添加主函數,但顯然添加它將代碼置於虛擬「箱根」中,並且它接受macro_use。好極了!

因此,我所做的只是添加:

/// # fn main() { } 
+1

這似乎在你提到的源鏈接被提及:*第二,我們需要增加我們自己的'主()'以及* 。 FWIW,這是因爲一旦你開始定義頂級項目(比如'extern crate'),doc測試工具假定你想完全控制這個例子。 – Shepmaster

+0

而沒有main()的代碼片段無效?我們無法記錄如何編寫庫? – Gyscos

+0

文檔塊中的代碼示例將自動編譯**並運行**。這樣做是爲了確保文檔示例保持正確,並且非常有用。要運行代碼,需要一個主要方法。因爲您正在定義頂級項目,所以不會爲您添加主要方法,正如我前面提到的。如果您不想編譯示例,則可以禁用編譯單個示例。你也可以註釋掉部分不需要展示但需要編譯的示例代碼。這些都不能記錄圖書館。 – Shepmaster