2014-11-06 111 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