Для решения проблемы можно написать:
Type myIntType = Type::\int();
Далее следует дополнительное объяснение. Конструктор \int()
определен как минимум дважды в разных местах:
- В абстрактном синтаксическом дереве определение типов Java, которые используются в
Declarations
. Это представление слова int
в исходном коде.
- В определении
TypeSymbol
в java::lang::m3::Core. Там \int()
представляет собой символьный тип.
У них одинаковое имя, потому что они указывают на одно и то же понятие, но в разных представлениях. Первый просто используется для прямого представления исходного кода, второй используется для его абстрактной символьной интерпретации.
Чтобы различать два представления, вы должны либо импортировать модуль, определяющий узлы AST, либо импортировать модуль, определяющий TypeSymbols. Если вы оба импортировали, вам следует явно выбрать представление:
Type myIntType = Type::\int();
TypeSymbol mySymbol = TypeSymbol::\int();
Итак, чтобы наконец объяснить сообщение об ошибке, система выбрала второй тип \int()` в TypeSymbol для создания значения, и вы попытались присвоить его переменной первого типа.
person
Jurgen Vinju
schedule
28.02.2014