В Microsoft Oslo SDK CTP 2008 (с использованием Intellipad) прекрасно компилируется следующий код:
module M {
type T {
Text : Text;
}
}
при компиляции приведенного ниже кода приводит к ошибке «M0197:« Текст »нельзя использовать в контексте типа»
module M {
type T {
Text : Text;
Value : Text; // error
}
}
Я не вижу разницы между примерами, так как в первом случае текст также используется в контексте типа.
UPDATE:
Чтобы добавить путаницу, рассмотрим следующий пример, который также прекрасно компилируется:
module M {
type X;
type T {
X : X;
Y : X;
}
}
Спецификация языка M гласит:
Объявления полей переопределяют лексическую область видимости, чтобы тип объявления не связывался с самим объявлением. Приписываемый тип объявления поля не должен быть самим объявлением; однако объявление может использоваться в ограничении. Рассмотрим следующий пример:
тип А;
тип B {
A: A;
}
Лексически заключенная область видимости для описания типа объявления поля A - это объявление объекта B. Без исключения, тип записи A связывается с объявлением поля в циклической ссылке, что является ошибкой. Исключение позволяет лексическому поиску пропустить объявление поля в этом случае.
Кажется, что определяемые пользователем типы и встроенные (встроенные) типы не рассматриваются как равные.
UPDATE2:
Обратите внимание, что Значение в приведенном выше примере не является зарезервированным ключевым словом. Та же ошибка возникает, если вы переименуете Значение в Y .
Есть идеи?
С уважением, Тамберг