这个问题在这里已有答案:
如何将我自己的一个结构的实例声明为静态?此示例无法编译:
static SERVER: Server<'static> = Server::new();
fn main() {
SERVER.start("127.0.0.1", 23);
}
你不能在全局范围内调用任何非const
函数。通常,您可以执行类似结构文字的操作,但隐私规则可能会阻止您执行此操作,其中存在私有字段且您未在同一模块中定义它。
所以,如果你有这样的事情:
struct Server<'a> {
foo: &'a str,
bar: uint,
}
你可以这样写:
const SERVER: Server<'static> = Server {
foo: "yay!",
bar: 0,
};
......但这是你在真正的static
或const
宣言中获得的最好成绩。然而,有一些解决方法可以实现这类事情,例如lazy-static,其中你的Server::new()
是完全合法的。