3

変数が存在するかどうか、つまり D で既に宣言されているかどうかを確認するにはどうすればよいですか?

背景は、バージョン条件を使用したいが、まだデフォルト値を持っているということです:

version(A)
{
  immutable int var = 1;
}
version(B)
{
  immutable int var = 2;
}
// this is pseudo code
if (var is not yet declared)
{
  immutable int var = 3;
}

Dでは内省が非常に多いため、これは可能だと思います...

4

1 に答える 1

10

さて、あなたのユースケースがどのように見えるかを考えると、あなたはそれについて間違っています。あなたは本当にもっと似たようなことをするべきです

version(A)
{
    immutable int var = 1;
}
else version(B)
{
    immutable int var = 2;
}
else
{
    immutable int var = 3;
}

ただし、一般的なケースでは、シンボルが存在するかどうかを特にテストする場合は、テスト対象のシンボルの名前であるis(typeof(symbol))where is を使用します。symbolしたがって、変数varが存在するかどうかをテストしたい場合は、次のようにします。

static if(is(typeof(var)))
{
    //var exists
}

もちろん、それが存在しないことをテストするには、条件を否定します。

static if(!is(typeof(var)))
{
    //var does not exist
}

typeof(exp)式の型を取得し、式が無効な場合 (変数が存在しないか、式内の関数がそれらの引数で機能しないなどの理由で)、結果はvoidです。is(type)型が non- かどうかをチェックしますvoid。したがって、is(typeof(exp))exp が有効な式であるかどうかをテストし、それが単なるシンボル名である場合は、それが有効なシンボルであるかどうかをテストしていることを意味します。

于 2013-02-09T12:10:36.767 に答える