9
汎用関数で静的変数を使用する場合、汎用関数の各インスタンス内の変数のエンティティはすべて同じです。このコードでは例えば汎用関数の異なるインスタンスが異なる静的変数を持つことは可能ですか?
、
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!
は一度だけ呼ばれます。
私は錆の遊び場を使用してアセンブリコードをチェックしINIT
変数が実際にfoo<T>
ものの自体は別の名前でインスタンス化されているタイプT
とは無関係であることを見ていました。
上記の例でprintln!
が2回呼び出されるように、ジェネリック関数の異なるインスタンスが異なる静的変数を持つことは可能ですか?
これは良い質問ではありませんが、一般的なパラメータを持つ静的変数をサポートしていない理由を知っていますか? – hfukuda
@hfukuda:そうですね。おそらく誰もそれを必要としないので、おそらく十分です。 –