1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年4月16日 |
---|
#7 in #initializer
4KB
58 行
constructor
添加了用于静态初始化的宏。
lib.rs
:
注册一个在 main 之前(如果是一个可执行文件)或加载时(如果是一个动态库)被调用的函数。**使用这种方法是糟糕的。**你可以以不那么脆弱的方式做到这一点。
示例
pub static mut X: usize = 0;
extern fn init() {
unsafe { X = 5; }
}
constructor! { init }
fn main() {
assert_eq!(unsafe { X }, 5);
}
注意事项
尽管实现很简单,但这并不完全可移植。
在 Windows 上进行特别复杂的事情,如 IO 或加载库,可能会引起问题。(?)
每个父模块必须是 pub
不可见的。如果不是,则会被 --release
去掉。至少编译器会给出有用的警告。
小心,有些人说这些技术会释放可怕的邪恶。 lazy_static 可能是更合适的工具。