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

如何检查变量是否在D中声明?,d,introspection,conditional-compilation,compile-time-constant,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中是可能的,因为它有太多的内省…好吧,考虑到您的用例,您的操作是错误的。

如何检查变量是否存在,即是否已在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))
其中
symbol
是您要测试的符号的名称。因此,如果您想测试变量
var
是否存在,您可以执行以下操作

static if(is(typeof(var)))
{
    //var exists
}
当然,要测试它是否不存在,只需否定条件:

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

typeof(exp)
获取表达式的类型,如果表达式无效(因为不存在变量,或者表达式中的函数不使用这些参数或其他任何参数),则结果为
void
<代码>为(类型)检查类型是否为非
void
。所以,
is(typeof(exp))
测试exp是否是有效的表达式,如果它只是一个符号名,这意味着它正在测试它是否是有效的符号。

第一个是我需要的。我不知道
version
可以使用
if-else
类型语法。谢谢你的解决方案。从第二个“解决方案”开始:我尝试了
typeof
,但是没有
is()
,所以我得到了一个编译器错误。我学的东西是我预期的两倍;)