如何检查变量是否存在,即是否已在 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 中是可能的,因为它有很多内省(introspection)......
最佳答案
好吧,鉴于您的用例看起来是什么,您的做法是错误的。你真的应该做更多类似的事情
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 是否是一个合法的表达式,如果它只是一个符号名,那就意味着它正在测试它是否是一个合法的符号。
关于d - 如何检查变量是否在D中声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787828/