
夠用的 Ruby
|
13
結構
Struct
是 Ruby 特殊的類別,它的任務是產生其他的類別。透過
Struct
產生的類別,如
果將每個特性名稱傳進
Struct.new
,這種類別將包含 getter 和 setter 方法。習慣上,若
要使用
Struct
產生的類別,要將它當作子類別來用;子類別可以給予名稱,而且它提
供了定義任何額外方法的便利之處。舉例來說,要讓名為
Point
的類別能擁有名為
x
和
y
的特性,我們可以如下編寫:
class Point < Struct.new(:x, :y)
def +(other_point)
Point.new(x + other_point.x, y + other_point.y)
end
def inspect
"#<Point (#{x}, #{y})>"
end
end
現在我們可以建立
Point
的實體、在 IRB 裡檢閱它們,並且傳送訊息給它們:
>> a = Point.new(2, 3)
=> #<Point (2, 3)>
>> b = Point.new(10, 20)
=> #<Point (10, 20)>
>> a + b
=> #<Point (12, 23)>
不只是我們定義的方法,為了取得和設定它的
x
特性的值,
Point
實體也會回應訊息 x
和
x=
,
y
和
y=
的情況也類似:
>> a.x
=> 2
>> a.x = 35
=> 35
>> a + b
=> #<Point (45, 23)>
Struct.new
產生的類別還有另一項實用的功能,它會像相等方法 ...