class是个关键词(Keyword)。 但跟java不同的是class并非是定义一种模板,并非类声明(class declaration)。而是一种操作符.
记住:class不是class declaration,而是一种操作符。 这句话理解很关键,否则下面的代码你看不懂:(其实Ruby不应该跟java的class混用同一个名称,@#%…………,让人家理解混淆)。可以简单的是ClassDef。
看下面的代码:
class D
def x; 'x' ; end
end
class D
def y; 'y' ; end
end
obj = D.new
obj.x # => "x"
obj.y # => "y"
这里的含有是:
第一个class D是定义一个叫做D的类,然后添加x方法,当第二次class D的时候,首次查找有没有叫做D的类,如果有,不用重新定义了,然后添加y方法。
这种东西在Java中是不允许的。在java中,不能有两个相同的名称,另外一个,不能拆分成两个定义。
在C#中,可以通过定义partial class来将两个同名的class合并为一个。 但本质还是不同的。
而Ruby中,可以重复的使用class D的。这种方式相当于第一次是如果没有D这个东西,首先定义D这个东西,然后在D中添加一些方法。第二次,如果有了D,则不需要再次定义了,直接往D中添加另外方法。
那么class这个关键词本身就相当于ClassDef。
--------------------------------------
再看例子:
3.times do
class C
puts "Hello"
end
end
这个东西在Java中是绝对不能的。在Java中,要使用类C,必须:
C clz = new C();
clz.sayHello();
而Ruby是可以这样的。
这就很奇怪了,那还需要D.new 这个东西来干嘛?