Вы не можете назвать какие-либо функции внутри глобальной; они должны быть строго литералами. Часто вы сможете делать что-то вроде структурных литералов, хотя правила конфиденциальности могут помешать вам сделать это, когда есть частные поля, и вы не определяете его в том же модуле.
Так что если у вас есть что-то вроде этого:
struct Server<'a> {
foo: &'a str,
bar: uint,
}
Вы можете написать это:
const SERVER: Server<'static> = Server {
foo: "yay!",
bar: 0,
};
... но это лучшее, что вы получите в истинном static
или const
декларации. Есть, однако, обходные пути для достижения такого рода вещей, такие как lazy-static, в которых ваш Server::new()
является полностью законным.
Обратите внимание на запись в FAQ: [Нет жизни до или после основного] (http://doc.rust-lang.org/complement-design-faq.html#there-is-no-life-before-or -after-Main-% 28no-статические-ctors/dtors% 29). –