Ruby 物件導向程式設計的一些高階應用

2021-08-31 05:10:36 字數 1424 閱讀 4001

1.send的用法

在ruby中可以在執行時,來決定那個物件被呼叫,send方法就是做這個的,他接受乙個symbol變數為引數。

首先來個非常非常的簡單的例子:

class foo

def foo

"aa"

endendputs foo.new.__send__(:foo)

當然也可以使用send方法,不過為了和可能出現的自己類中定義的send方法區別,推薦使用__send__方法

在1.9中,send方法不能呼叫private方法了,不過我們能夠使用__send!來呼叫:

class foo   

private

def foo

"aa"

end

end

p foo.new.__send!(:foo) # => nil

p foo.new.send(:foo) #private method `foo' called for #(nomethoderror)

下面有個排序的比較全的例子:

class person

attr_reader :name, :age, :height

def initialize(name, age, height)

@name, @age, @height = name, age, height

enddef inspect

"#@name #@age #@height"

endendclass array

def sort_by(sym) # our own version of sort_by

self.sort

endendpeople =

people << person.new("hansel", 35, 69)

people << person.new("gretel", 32, 64)

people << person.new("ted", 36, 68)

people << person.new("alice", 33, 63)

p1 = people.sort_by(:name)

p2 = people.sort_by(:age)

p3 = people.sort_by(:height)

p p1 # [alice 33 63, gretel 32 64, hansel 35 69, ted 36 68]

p p2 # [gretel 32 64, alice 33 63, hansel 35 69, ted 36 68]

p p3 # [alice 33 63, gretel 32 64, ted 36 68, hansel 35 69]

OOP 物件導向程式設計 的一些特性

介面 介面是把公共例項 非靜態 方法和屬性結合起來,以封裝特定功能的乙個集合。一旦定義了介面,就可以在類中實現它。介面注意事項 介面不能單獨存在。不能像例項化乙個類那樣例項化介面。另外,介面不能包含實現其成員的任何 而只能定義成員本身。實現過程必須在實現介面的類中完成。乙個類可以支援多個介面,多個類...

物件導向的一些法則

物件導向的一些法則 法則1 優先使用 物件 組合,而非繼承 組合是一種通過建立乙個組合了其它物件的物件,從而獲得新功能的復用方 法有些時候也稱之為 聚合 aggregation 或 包容 containment 聚合 乙個物件擁有另乙個物件或對另乙個物件負責 即乙個物件包含另乙個物件或是另乙個物件的...

物件導向的一些知識

oop object oriented programming 物件導向程式設計 00d object oriented design 物件導向設計 面向過程 就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步的實現。例如 把大象裝進冰箱裡去。第一步 將冰箱開啟 第二步 將大象放進冰箱 第...