D语言比较类型:无法使用“==”比较不同类型

4

我在我的代码中有以下一行:

static if (typeof(val) == string) {

代码编译时出现错误,提示Error: incompatible types for ((string) == (string)): cannot use '==' with types。那么正确的检查变量类型的方法是什么?


3
我相信这可能会有所帮助:http://dlang.org/spec/expression.html#IsExpression - DejanLekic
1个回答

8
正确的方法是使用一个is表达式来包含它:is(A == b)
static if (is(typeof(val) == string)) {

所以==的行为是上下文相关的,因此在is()内部,==可以接受一对类型作为参数,但在外部则不行?奇怪的事情,但做得很好。 - Cecil Ward
is()表达式是一种神奇的语法,与其他语法没有实际关联。它执行类型比较,并且在某些反射低级部分中也被使用(例如,有一个is(Params func == __parameters),它提取参数列表并声明一个新符号来保存它们,而不是传统的比较)。因此,您应该将其视为完全独立的东西,尽管与is运算符(a is b)共享关键字和符号,以及等式和继承is(A : some_interface)返回true,如果A可以隐式转换为它,则适用于更多的类! - Adam D. Ruppe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接