在 Microsoft Oslo SDK CTP 2008(使用 Intellipad)中,以下代码编译良好:
module M {
type T {
Text : Text;
}
}
在编译以下代码时会导致错误“M0197:'Text' cannot be used in a Type context”
module M {
type T {
Text : Text;
Value : Text; // error
}
}
我看不出示例之间的区别,因为在第一种情况下 Text 也用于 Type 上下文。
更新:
为了增加混乱,请考虑以下示例,该示例也可以正常编译:
module M {
type X;
type T {
X : X;
Y : X;
}
}
M 语言规范指出:
字段声明覆盖词法范围以防止声明类型绑定到声明本身。字段声明的归属类型不能是声明本身;但是,该声明可以在约束中使用。考虑以下示例:
A型;类型 B { A : A; }
字段声明 A 的类型归属的词法封闭范围是实体声明 B。无一例外,类型归属 A 将绑定到循环引用中的字段声明,这是一个错误。在这种情况下,异常允许词法查找跳过字段声明。
似乎用户定义的类型和内置(内在)类型不被平等对待。
更新2:
请注意,上面示例中的Value不是保留关键字。如果将Value重命名为Y ,则会产生相同的错误。
有任何想法吗?
问候,坦伯格