Ruby 元程式設計 第二版隨筆(三)

2021-09-02 15:39:59 字數 1202 閱讀 9712

執行方法

method execution

呼叫方法時,ruby要做兩件事:首先找到這個方法,然後執行這個方法。到目前為止,我們只學會了如何找到這個方法,接下來看看如何執行方法。

假設我們自己就是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才知道那個是接收者,再用它來執行這個方法。

self關鍵字

ruby的每一行**都會在乙個物件中被執行------這個物件就是所謂的當前物件。當前物件也可以用self表示,因為可以用self關鍵字來對它進行訪問。

任何時刻,只有乙個物件能充當當前物件,而且沒有那個物件能夠長期充當這個角色。呼叫乙個方法時,接收者就成為self。從這一刻起所有的例項變數都是self 的例項變數,所有沒有明確指明接收者的方法都在self上呼叫。一旦**轉而呼叫其他物件的方法,這個物件就成為了self。

class myclass

def testing_self

@var = 10 #self的乙個例項變數

my_method() #與self.my_method()相同

self

enddef my_method

@var = @var + 1

endend

obj = myclass.new

obj.testing_self # => #

呼叫testing_self方法時,接收者obj就成為self。因此,例項變數@var就是obj 的例項變數,而且my_method方法也在obj上被呼叫。在my_method方法執行期間,self還是obj,因此@var還是obj物件的例項變數。最後,testing_self方法返回self的引用(@var=11)

Ruby 元程式設計 第二版隨筆(二)

呼叫方法時發生了什麼?呼叫方法時ruby會做兩件事 1 找到這個方法,這個過程成為方法查詢。2 執行這個方法,為了做到這點,ruby要用到乙個稱為self 的東西。1.方法查詢 method lookup 呼叫乙個方法前,ruby會在物件中查詢那個方法。不過,在進一步學習之前,我們還要掌握兩個新概念...

GNU Linux程式設計指南 第二版

本書全面而深入地介紹了gnu linux程式設計。首先介紹了在linux上程式設計必備的程式設計工具,然後在庫函式 系統呼叫以及核心上闡述linux程式設計知識,並專門講述了包括tcp ip udp以及多播套介面在內的網路程式設計知識 圖形介面也是本書的重點內容,本書著重講述了文字形式的圖形介面庫n...

《演算法競賽入門經典(第二版)》 隨筆

c語言中整數值用 d輸出,實數 浮點數 用 f輸出。kiss原則 keep it and stupid 獲得程式執行時間 包括鍵盤輸入時間 include printf 執行時間 2f n double clock clocks per sec 輸入個數未知時 while scanf d x 1 對...