为什么 class 名称不大写会导致编译器错误?
Why does not capitalizing the class name cause a compiler error here?
这个 Groovy 脚本运行良好:
println 0;
class MyClass
{
public MyClass(int j) {};
public MyClass method() {return this};
}
这个因编译错误而失败 ("unexpected token: public at line: 5, column: 4")
println 0;
class myClass
{
public myClass(int j) {};
public myClass method() {return this};
}
唯一的区别是 class 名称的大小写。我知道惯例是 class 名称要大写,但我认为这只是一个惯例。究竟是什么导致了编译错误?
根据 2008 年 Groovy mailing list thread 提出的类似问题,Paul King 解释说:
Yes, the grammar currently looks for uppercase types only in declarations (apart from the primitive types).
最近 unresolved Groovy JIRA ticket 关于小写 class 名称,blackdrag 评论说:
The problem is that in Groovy (unlike Java) variable names, method names and class names can share a context, making it ambiguous.
除非对标记器进行更深入的探索,否则由于 Groovy 的语法灵活性,我将把它归结为 Java 和 Groovy 之间的另一个小不一致。并且 Groovy 并没有彻底实现一种方法来判断令牌是否是此上下文中的类型或方法名称,而是采取了一种捷径,并且仅假设它可以是类型名称,如果令牌匹配基元或以大写字母,与传统的 Java 类型一样。
这个 Groovy 脚本运行良好:
println 0;
class MyClass
{
public MyClass(int j) {};
public MyClass method() {return this};
}
这个因编译错误而失败 ("unexpected token: public at line: 5, column: 4")
println 0;
class myClass
{
public myClass(int j) {};
public myClass method() {return this};
}
唯一的区别是 class 名称的大小写。我知道惯例是 class 名称要大写,但我认为这只是一个惯例。究竟是什么导致了编译错误?
根据 2008 年 Groovy mailing list thread 提出的类似问题,Paul King 解释说:
Yes, the grammar currently looks for uppercase types only in declarations (apart from the primitive types).
最近 unresolved Groovy JIRA ticket 关于小写 class 名称,blackdrag 评论说:
The problem is that in Groovy (unlike Java) variable names, method names and class names can share a context, making it ambiguous.
除非对标记器进行更深入的探索,否则由于 Groovy 的语法灵活性,我将把它归结为 Java 和 Groovy 之间的另一个小不一致。并且 Groovy 并没有彻底实现一种方法来判断令牌是否是此上下文中的类型或方法名称,而是采取了一种捷径,并且仅假设它可以是类型名称,如果令牌匹配基元或以大写字母,与传统的 Java 类型一样。