1 發送一條訊息給一個對象
當你調用一個方法時,你也就是發送了一條訊息給一個對象,在ruby中我們能夠在運行時決定那個方 法被調用。send 方法就是做這個的,他接受一個symbol為參數.
舉個簡單的例子,假設我們要寫一個排序,我們想要使用不同的域作為比較的key。雖然我們這時可以 用block,可是如果使用send的話,我們能有一個更優美的寫法:
Java代碼
class Person attr_reader :name, :age, :height def initialize(name, age, height) @name, @age, @height = name, age, height end def inspect "#@name #@age #@height" end end class Array def sort_by(sym) # Our own version of sort_by self.sort {|x,y| x.send(sym) <=> y.send(sym) } end end people = [] 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]
__send__ 其實也就是send方法的別名了。不過這邊建議用__send__,這是因為send有可能作為一個用 戶自己定義的方法。