2015-11-08 233 views
11

有沒有辦法讓代碼在下面工作?也就是說,在類型別名下導出一個枚舉,並允許以新名稱訪問這些變體?枚舉類型別名

enum One { A, B, C } 

type Two = One; 

fn main() { 
    // error: no associated item named `B` found for type `One` in the current scope 
    let b = Two::B; 
} 

回答

10

我不認爲類型別名允許做你想要什麼,而是你可以重命名的use聲明枚舉類型:

enum One { A, B, C } 

fn main() { 
    use One as Two; 
    let b = Two::B; 
} 

您可以結合使用這與pub use重新導出類型在不同的標識符下:

mod foo { 
    pub enum One { A, B, C } 
} 

mod bar { 
    pub use foo::One as Two; 
} 

fn main() { 
    use bar::Two; 
    let b = Two::B; 
} 
mod foo { 
    pub enum One { A, B, C } 
} 

mod bar { 
    pub use foo::One as Two; 
} 

fn main() { 
    use bar::Two; 
    let b = Two::B; 
} 
+0

重新導出沒有竅門 - 我猜測枚舉類型的行爲更像微型模塊而不是結構和基元。 –