在Ruby中查詢和執行方法

2022-09-26 05:30:15 字數 1624 閱讀 7693

當呼叫乙個方法時,ruby會做兩件事。

1.找到這個方法。這個方法稱為方法查詢。

2.執行這個方法。為了做到這點,ruby需要乙個叫做self的東西。

這樣的乙個過程--發現乙個方法再執行之--在每種物件導向語言中都會發生。不過,對於像ruby這樣非常動態的語言,深入理解這個過程顯得尤為重要。你有沒有好奇過乙個方法究竟定義在**呢?如果有,那絕對應該深入程式設計客棧理解方法查詢及self。

當呼叫乙個方法時,ruby會在物件的類中查詢那個方法。不過,在給出更複雜的例子之前,你需要了解兩個新概念:接收者(receiver)和祖先鏈(ancetors chain)。

接收者就是你呼叫方法所在的物件。例如,在my_string.reverse()語句中,my_string就是接收者。

為了理解祖先鏈的概念,可以先來觀察任意乙個ruby類。想象從乙個類移動到它的超類,然後再移動到超類的超類,依此類推,直到到達object類(所有類的預設超類),最後來到basicobject類(ruby類體系結構的根節點)。在這個過程中,你所經歷的類路徑就是該類的祖先鏈(祖先鏈中還可以包含模組)。

既然你已經知道什麼是接受者及祖先鏈了,就可以用一句話來概括方法查詢的過程:為了查詢乙個方法,ruby首先在接受者的類中查詢,然後一層層地在祖先鏈中查詢,直到找到這個方法為止。

class myclass

def my_method

my_method()

endend

class mysubclass 程式設計客棧end

obj = mysubclass.new

obj.my_method() # =>"my_method()"

當呼叫my_method()方法時,ruby會從接收者obj出發,來到mysubclass類。由於在這裡不能找到my_method()方法,ruby向上來到myclass類,在那裡找到了這個方法。

如果在這兒也沒找到這個方法,那麼ruby將會沿著祖先鏈向上來到object類和basicobject類。按照大多數人畫圖的順序,這種查詢行為被稱為"向右一步,再向上"規則。也就是說,先向右一步來到接收者所在的類,然後沿著祖先鏈向上直到找到給定的方法。

到目前為止,我們只關注於如何找到方法,現在終於要來看看如何執行方法了。

設想你就是ruby直譯器。若某個人呼叫了乙個名叫my_method()的方法,你用"向右一步,再向上"的方式找到了這個方法,你發現這個方法定義如下:

def my_method

temp = @x +1

my_other_method(temp)

end為了執行這個方法,你需要回答兩個問題。首先,例項變數@x屬於哪個物件?其次,你應該在哪程式設計客棧個物件上呼叫方法my_other_method()?

作為具有智慧型的人類(而非愚蠢的電腦程式),你很可能憑直覺就能回答這兩個問題:@x例項變數和my_other_method()方法都屬於接收程式設計客棧者--那個最初呼叫my_method()方法的物件。不過,ruby可沒有直覺,這對它來說是乙個奢侈的東西。當呼叫乙個方法時,ruby需要持有乙個接收者的引用,正是這個引用的存在,它可以記得哪個物件是接收者,再用它來執行這個方法。這個接收者引用也可以為你所用。

本文標題: 在ruby中查詢和執行方法

本文位址: /jiaoben/ruby/128029.html

ruby中的方法查詢

ruby中的方法呼叫都是物件.方法的形式,那麼物件如何找到這個方法呢?首先必須了解祖先鏈的概念,祖先鏈就是從乙個類開始,到它的父類,再到父類的父類.一直到最終的起點 ruby中是basicobject類 這期間經歷過的路徑就是祖先鏈。1混含模組和繼承的方法查詢 對於乙個例項物件,先找它屬於的類中是否...

在Mac OS X上安裝 Ruby執行環境

對於新入門的開發者,如何安裝 ruby和ruby gems 的執行環境可能會是個問題,本頁主要介紹如何用一條靠譜的路子快速安裝 ruby 開發環境。此安裝方法同樣適用於產品環境!系統需求 首先確定作業系統環境,不建議在 windows 上面搞,所以你需要用 mac os x 任意 linux 發行版...

在Mac OS X上安裝 Ruby執行環境

安裝cocoapods的順序 homebrew ruby cocoapods 步驟1 安裝 rvm ruby version manager curl l bash s stable 在執行過程中可能會遇到以下提示 自動安裝homebrew 如果沒有輸入enter,則無法安裝在預設路徑下。about...