2014-11-06 4 views
1

Как объявить экземпляр одной из моих собственных структур как статический? Этот пример, очевидно, не компилируется, но он должен продемонстрировать мои намерения.Объявление статической структуры 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, 
}; 

... но это лучшее, что вы получите в истинном static или const декларации. Есть, однако, обходные пути для достижения такого рода вещей, такие как lazy-static, в которых ваш Server::new()является полностью законным.

+1

Обратите внимание на запись в FAQ: [Нет жизни до или после основного] (http://doc.rust-lang.org/complement-design-faq.html#there-is-no-life-before-or -after-Main-% 28no-статические-ctors/dtors% 29). –

Смежные вопросы