Как инициализировать тип int()?

При попытке инициализировать тип с помощью \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();

Как правильно инициализировать переменную типа в \int()?


person Kebabbi    schedule 28.02.2014    source источник


Ответы (2)


Для решения проблемы можно написать:

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

\int() это TypeSymbol, я думаю, вы ищете

Type inttype = int();
person Tim van Dalen    schedule 28.02.2014
comment
Строка не работает, потому что int является зарезервированным ключевым словом, которое следует экранировать: \int() - person Jurgen Vinju; 28.02.2014