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

标签 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 中是可能的,因为它有很多内省(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) 获取表达式的类型,如果表达式无效(因为不存在的变量或表达式中的函数不适用于这些参数或其他),则结果为 voidis(type) 检查类型是否为非void。所以, is(typeof(exp)) 测试 exp 是否是一个合法的表达式,如果它只是一个符号名,那就意味着它正在测试它是否是一个合法的符号。

关于d - 如何检查变量是否在D中声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787828/

相关文章:

functional-programming - D 中的容器语义和功能风格

d - 如何获取泛型类型的默认值?

c# - 使用自定义符号执行 Roslyn 条件编译(例如 : "DEBUG") defined

c++ #ifdef Mac OS X 问题

c - 是否有编写可移植 C 的良好在线教程?

lambda - 新的 lambda 语法是什么?

d - 有D的包裹管理员吗?

java - 我如何找出我需要从 Java 库中导入的 namespace ?

php - 我在哪里可以获得反射修饰符值的列表?

java - 如何正确使用Apache Common BeanUtil的BeanComparator来受益于内省(introspection)?