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

时间:2013-02-09 11:51:05

标签: 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;
}

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

1 个答案:

答案 0 :(得分:10)

好吧,考虑到你的用例似乎是错误的。你真的应该做更像

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

但是在一般情况下,如果您正在专门测试符号是否存在,请使用is(typeof(symbol)),其中symbol是您要测试的符号的名称。因此,如果您想测试变量var是否存在,您可以执行类似

的操作
static if(is(typeof(var)))
{
    //var exists
}

当然要测试不存在,你只是否定了这个条件:

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

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