1

toString(TypeSymbol t, M3 m)当我遇到一个奇怪的解析器错误时,我正在编写一个小辅助函数。

该函数有很多语句,例如:

...
}else if(object() := t){
    return "object";
}else if(float() := t){
    return "float";
}else if(double() := t){
    return "double";
...

这些工作正常。int()但是,当我为or尝试相同的模式时void(),编译器会给出错误,特别是在=符号上。

if(int() := t){}
          ^ Parse error here
4

1 回答 1

1

正如经常发生的那样,我在打字时找到了这个问题的答案。但是,我认为它对其他人来说很有价值,所以我还是会发布它。

我在这个答案中得到了模式匹配的语法:https ://stackoverflow.com/a/21929342/451847

似乎模式匹配的“正确”方式是在要测试的类型前面加上\.

所以,上面的代码变成了:

...
}else if(\object() := t){
    return "object";
}else if(\float() := t){
    return "float";
}else if(\double() := t){
    return "double";
...

\语法适用于大多数情况,但我认为int()void()有不同的定义。

于 2014-02-22T13:15:38.870 回答