Gdy używam zmiennej statycznej w funkcjach ogólnych, elementy zmiennej w każdym wystąpieniu funkcji ogólnej są takie same.Czy różne instancje funkcji ogólnej mogą mieć różne zmienne statyczne?
Na przykład, w tym kodzie
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!
nazywa się tylko raz.
Sprawdziłem kod zestawu przy użyciu placu zabaw Rust i zauważyłem, że zmienna INIT
jest niezależna od typu T
tak naprawdę, chociaż foo<T>
same są tworzone z inną nazwą.
Czy jest możliwe, aby różne wystąpienie funkcji ogólnej miało różne zmienne statyczne, aby println!
było wywoływane dwukrotnie w powyższym przykładzie?
Chociaż może to nie być dobre pytanie, czy wiesz, dlaczego rdza nie obsługuje statycznej zmiennej o parametrze ogólnym? – hfukuda
@hfukuda: Niezupełnie. Prawdopodobnie dlatego, że nikt nigdy nie potrzebował tego wystarczająco źle. –