我如何声明我的一个结构体实例为静态的?这个示例无法编译:
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()
是完全合法的。