2014-11-06 178 views
1

如何將我自己的結構之一的實例聲明爲static?這個樣本顯然不能編譯,但它應該證明我的意圖。Rust靜態結構聲明

static SERVER: Server<'static> = Server::new(); 

fn main() { 
    SERVER.start("127.0.0.1",23); 
} 

回答

5

您不能在全局內調用任何函數;他們必須嚴格文字。通常你可以做類似於結構文字的東西,儘管隱私規則可能會阻止你這樣做,在那裏有私人領域,而你沒有在同一個模塊中定義它。

所以,如果你有這樣的事情:

struct Server<'a> { 
    foo: &'a str, 
    bar: uint, 
} 

你可以這樣寫:

const SERVER: Server<'static> = Server { 
    foo: "yay!", 
    bar: 0, 
}; 

...那是你在一個真正的staticconst聲明得到最好的。但是,有一些解決方法可以實現這種功能,例如lazy-static,其中您的Server::new()完全合法。

+1

請注意常見問題條目:[主要之前或之後沒有生命](http://doc.rust-lang.org/complement-design-faq.html#there-is-no-life-before-or -after-main-%28no靜電-構建函數/ dtors%29)。 – 2014-11-06 07:33:12