2015-04-04 43 views
2

如果我們在全局範圍的枚舉聲明的末尾添加;,編譯器會報錯。爲什麼在全局範圍中聲明的枚舉不需要終止分號?

#[derive(Debug)] 
enum Organs{ 
    Head, 
    Tail, 
}; 

fn main(){ 
    println!("{:?}", Organs::Head); 
} 

所得錯誤消息是

enums.rs:5:2: 5:3 error: expected item, found `;` 
enums.rs:5 }; 

然而,在函數內聲明時,語句終止子是不是強制性的,該程序將具有或不具有;編譯。

fn main(){ 
    #[derive(Debug)] 
    enum Organs{ 
     Head, 
     Tail, 
    }; 
    println!("{:?}", Organs::Head); 
} 

我浪費了很多時間(剛纔)確定編譯器在抱怨什麼。我沒有想到枚舉聲明(在全局範圍內)不能以;終止。爲什麼存在這種不一致(或者我誤解了什麼)?

回答

5

沒有不一致。你在函數中寫的是enum項,空聲明,以及包含表達式宏調用的語句。

+1

確實'fn main(){;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ''實際上編譯! – Levans 2015-04-04 08:11:55

+0

我的實際問題不是第二個例子,而是第一個例子。爲什麼用';'終止全局範圍中的枚舉聲明會產生編譯器錯誤? – 2015-04-04 13:47:04

+0

@basic_bgnr:你*不是*用*結束enum聲明---你正在寫一個空的語句,並且你不能在模塊級別有語句。請注意,有一些聲明表單需要*分號(例如,寫入沒有成員的'struct'或'enum'),但這不是其中之一。 – 2015-04-06 02:32:16