Class
Ruby 是一款物件導向程式語言(Objecte-Oriented Programming, OOP),物件化的很徹底的程式語言,在 Ruby 的世界裡,幾乎所有的東西都是物件。
什麼是類別呢?
以汽車來說,汽車就是一個類別class,然後裡面有很多方法 像是 轉彎 煞車 發動...
class 汽車
def 左轉
end
def 停車
end
......
end
定義類別
在 Ruby 要定義一個類別,使用的關鍵字是 class:
class 類別的名字
#...
end
所有類別的名字都是一個常數。
所以才會在撰寫類別名稱的時候,必須以大寫開頭(定義為常數)才能運作。
class Car #=> 開頭必須是大寫
end
如果我想定義一個汽車類別,順便在裡面先定義好一些方法,就可以這樣寫:
class Car
def turn_right
puts "右轉"
end
def stop
puts "煞車"
end
end
有了 Car 類別之後,就可以用這個類別的 new 方法來產生實體:
toyota = Car.new
toyota.turn_right #=> 右轉
honda = Car.new
honda.stop #=> 煞車
初始化
如果要透過 new 方法傳參數進來,在類別裡面必須有個名為 initialize 的方法來接收傳進來的參數。在 initialize 方法裡,常見的手法是會把參數傳進來給內部的實體變數(instance variable)。
class Car
def initialize(type, cc)
@type = type
@cc = cc
end
def kind
puts "#{type}"
end
def displacemint
puts "#{cc}"
end
end
honda = Car.new(sedan, 1800)
honda.kind #=>sedan
honday.displacemint #=>1800
在 Ruby 裡面,所有的類別的類別都是 Class 這個類別。
Object.class
# => Class
Kernel.class
# => Module
Module.class
# => Class
Class.class
#=> Class
在 Ruby 的世界中,所有的類別其實都是 Class 這個類別的實體表現而已。
而父類別的的類別方法,則可以作為在定義新類別時的 Block 中使用,用來拓展一個類別的多樣性。