如何检查变量是否在D中声明?

ste*_*fen 3 d introspection conditional-compilation compile-time-constant

如何检查变量是否存在,即已在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;
}
Run Code Online (Sandbox Code Playgroud)

我只是假设这在D中是可能的,因为它有如此多的内省......

Jon*_*vis 10

好吧,考虑到你的用例似乎是错误的.你真的应该做更多的事情

version(A)
{
    immutable int var = 1;
}
else version(B)
{
    immutable int var = 2;
}
else
{
    immutable int var = 3;
}
Run Code Online (Sandbox Code Playgroud)

但在一般情况下,如果你正在寻找专门测试符号是否存在,使用is(typeof(symbol))这里symbol是你的测试符号的名称.所以,如果你想测试变量是否var存在,你会做类似的事情

static if(is(typeof(var)))
{
    //var exists
}
Run Code Online (Sandbox Code Playgroud)

当然,为了测试它存在,你只是否定条件:

static if(!is(typeof(var)))
{
    //var does not exist
}
Run Code Online (Sandbox Code Playgroud)

typeof(exp)获取表达式的类型,如果表达式无效(因为一个变量不存在或者表达式中的函数不能用于那些参数或其他),那么结果就是void.is(type)检查类型是否为非void.因此,is(typeof(exp))测试exp是否是一个有效的表达式,并且在它只是一个符号名称的情况下,这意味着它正在测试它是否是一个有效的符号.