如何将我的Rust结构体的实例声明为静态的?

8

我如何声明我的一个结构体实例为静态的?这个示例无法编译:

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

fn main() {
    SERVER.start("127.0.0.1", 23);
}
1个回答

16

在全局作用域中,您不能调用任何非const函数。通常情况下,您可以使用结构体字面量等方式来实现类似的功能,但是隐私规则可能会阻止您这样做,尤其是当存在私有字段并且您不在同一模块中定义时。

因此,如果您有以下代码:

struct Server<'a> {
    foo: &'a str,
    bar: uint,
}
您可以这样写:

您可以这样写:

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

…但这就是你在真正的staticconst声明中能得到的最好的结果。然而,有一些解决方法可以实现类似的功能,比如lazy-static,其中你的Server::new()完全合法的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接