当尝试将Type初始化为\ int()时,如http://tutor.rascal-mpl.org/Rascal/Libraries/analysis/m3/Core/modifiers/modifiers.html#/Rascal/Libraries/lang/java/m3/AST/Declaration/Declaration.html中所示,rascal会抛出一个错误,说“预期类型,但得到了TypeSymbol”。
这是我使用的代码:
Type inttype = \int();
将Type变量初始化为\ int()的正确方法是什么?
答案 0 :(得分:2)
\int()
是TypeSymbol
,我认为您正在寻找
Type inttype = int();
答案 1 :(得分:2)
要解决问题,您可以写:
Type myIntType = Type::\int();
更多解释如下。 \int()
构造函数在不同的地方至少定义了两次:
Declarations
中使用的Java类型的抽象语法树定义中。它是源代码中单词int
的表示。 TypeSymbol
定义中。 \int()
代表符号类型。 它们具有相同的名称,因为它们指向相同的概念,但使用不同的表示形式。第一个用于直接表示源代码,第二个用于抽象符号解释。
要区分这两种表示,您应该导入定义AST节点的模块,或者导入定义TypeSymbols的模块。如果您碰巧同时导入了两者,则应明确选择一种表示形式:
Type myIntType = Type::\int();
TypeSymbol mySymbol = TypeSymbol::\int();
因此,为了最终解释错误消息,系统选择TypeSymbol中的第二种\ int()`来构建一个值,并尝试将其分配给第一种变量。