天天看點

《Ruby元程式設計》之class關鍵詞

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 這個東西來幹嘛?

繼續閱讀