1

尝试将类型初始化为 \int() 时,如http://tutor.rascal-mpl.org/Rascal/Libraries/analysis/m3/Core/modifiers/modifiers.html#/Rascal/Libraries/lang/中所示java/m3/AST/Declaration/Declaration.html,流氓抛出一个错误,说“预期类型,但得到了 TypeSymbol”。

这是我使用的代码:

Type inttype = \int();

将 Type 变量初始化为 \int() 的正确方法是什么?

4

2 回答 2

2

\int()是一个TypeSymbol,我想你在找

Type inttype = int();
于 2014-02-28T10:43:04.123 回答
2

为了解决这个问题,你可以写:

Type myIntType = Type::\int();

更多解释如下。构造\int()函数在不同的地方至少定义了两次:

  • 在抽象语法树定义中使用的 Java 类型Declarations。它是int源代码中单词的表示。
  • TypeSymboljava::lang::m3::Core 的定义中。那里\int()代表一个符号类型。

它们具有相同的名称,因为它们指向相同的概念,但表示方式不同。第一个仅用于源代码的直接表示,第二个用于其抽象符号解释。

要区分这两种表示,您应该导入定义 AST 节点的模块,或者导入定义 TypeSymbols 的模块。如果您碰巧同时导入了两者,则应明确选择一个表示:

Type myIntType = Type::\int(); TypeSymbol mySymbol = TypeSymbol::\int();

因此,为了最终解释错误消息,系统选择了 TypeSymbol 中的第二种 \int()` 来构建一个值,并且您尝试将其分配给第一种变量。

于 2014-02-28T11:57:01.797 回答