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))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 是否是一个有效的表达式,如果它只是一个符号名称,这意味着它正在测试它是否是一个有效的符号。

于 2013-02-09T12:10:36.767 回答