当我在泛型函数中使用静态变量时,泛型函数的每个实例中的变量实体都是相同的.
例如,在这个代码中
fn foo<T>() {
use std::sync::{Once, ONCE_INIT};
static INIT: Once = ONCE_INIT;
INIT.call_once(|| {
// run initialization here
println!("Called");
});
}
fn main() {
foo::<i64>();
foo::<i64>();
foo::<isize>();
}
println!
只叫一次.
我使用Rust Playway判断了汇编代码,发现INIT
变量与T
实际是哪种类型无关,尽管foo<T>
本身是用不同的名称实例化的.
在上面的例子中,有两次调用不同的通用变量吗?