在Ruby中,class是开放的。 使用Open Class的关键问题在于: 名称覆盖。 就是你写的方法名称,特别要跟别人写的,不要相同。否则会覆盖,覆盖名称不要紧,连方法体都会覆盖,从而产生错误。
名称这东西,很容易冲突。最简单的方式是,不断的往 名称添加父名称,祖父名称。。。构成下面形式: GrandfatherName.FatherName.Name。 在java中叫做package,在C#中叫NameSpace.
起名字,还好办。但在一个Class,每个成员member,名称应该不同的。
问题在于Open Class中,及其容易修改到别人写的class,所以要尤其注意。这个java等不一样,没有静态编译的。没有编译,意味着没人帮你检查这个问题。
所以,有编译器语言好处是,它首先会帮你检查写的是否正确。正确了才构造语法树AST。