Ruby Programming/Classes and objects

維基教科書,自由的教學讀本

← Writing methods | Exceptions →

Ruby 類別[編輯]

在Ruby中任何東西都是物件。每個物件都有個類別。找出一個物件的類別只要呼叫物件的class方法即可,來看看這個範例:

   puts "This is a string".class
   puts 9.class
   puts ["this","is","an","array"].class
   puts {:this => "is", :a => "hash"}.class
   puts :symbol.class

不論如何,你都應該已經知道了這個。你目前還不知道的只是如何建立你自己的類別跟延伸Ruby內建的類別。

建立類別實體[編輯]

一個類別實體是一個該類別的物件,舉例來說,"chocolate"是一個字串類別實體。你已經知道你可以建立字串、陣列、雜湊(hashes)、數值(numbers)與其他內建的型態透過引號(雙引號或單引號)、中括號、大括號等等,但你也可以透過new方法來建立它們。 舉例來說,my_string = ""等同於my_string = String.new 每個類別都有一個new方法:陣列、雜湊、整數,不論是什麼都一樣。當你建立你自己的類別時,你也會使用new方法來建立實體。

建立類別[編輯]

類別意味著是一個物件的型態,就像是一本書,一隻鯨魚,一個葡萄或者是巧克力。每個人都愛巧克力,所以我們來建立一個巧克力類別:

  class Chocolate
      def eat
          puts "That tasted great!"
      end
  end

來看看這個。類別是透過class保留字來建立的,緊接著是類別的名字。所有的類別名稱都必須以大寫英文開頭。大部分我們都會用CamelCase(駱駝拼寫法)來替類別命名。所以我們可以建立一個像是PieceOfChocolate的類別,但是不能寫成Piece_of_Chocolate

接下來就是定義類別方法。一個類別方法是一個類別中個別定義的方法,舉例來說,String類別有一個length方法:

  # 輸出 "5"
  puts "hello".length

呼叫一個巧克力類別實體的eat方法,我們會這樣寫:

  my_chocolate = Chocolate.new
  my_chocolate.eat # 輸出 "That tasted great!"

你也可以透過send來呼叫方法

  "hello".send(:length) # 輸出 "5"
  my_chocolate.send(:eat) # 輸出 "That tasted great!"

然而,使用send是比較好的方法,