1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017年4月16日

#7 in #initializer

MIT/Apache

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 可能是更合适的工具。

无运行时依赖