如何检查变量是否存在,即是否已在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中是可能的,因为它有如此多的内省......
答案 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)
获取表达式的类型,如果表达式无效(因为某个变量不存在或者表达式中的函数不能与这些参数一起使用),那么结果是void
。 is(type)
检查类型是否为非void
。因此,is(typeof(exp))
测试exp是否是一个有效的表达式,并且在它只是一个符号名称的情况下,这意味着它正在测试它是否是一个有效的符号。