如何检查变量是否存在,即是否已在 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 中是可能的,因为它有很多内省......
如何检查变量是否存在,即是否已在 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 中是可能的,因为它有很多内省......
好吧,鉴于您的用例看起来是什么,您做错了。你真的应该做更多类似的事情
version(A)
{
immutable int var = 1;
}
else version(B)
{
immutable int var = 2;
}
else
{
immutable int var = 3;
}
但在一般情况下,如果您要专门测试符号是否存在,请使用is(typeof(symbol))
wheresymbol
是您要测试的符号的名称。所以,如果你想测试变量是否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 是否是一个有效的表达式,如果它只是一个符号名称,这意味着它正在测试它是否是一个有效的符号。