Preface
在 Ruby 中,self 代表預設的訊息接收者,不同的範圍或呼叫方式,self 代表的物件也不相同。在頂層環境中,self 是參考至一個名稱為 main 的物件,為 Object 的實例:
關於 self
在頂層環境中定義方法,相當於在 Object 類別中定義私有實例方法。例如:
- def some
- puts "Some"
- end
- class Object
- def some
- puts "Some"
- end
- private :some
- end
private 方法不需也不能透過 self 呼叫的唯一例外,是在類別中的方法呼叫指定方法時。例如:
在上例的 initialize 方法中,想呼叫 private 的 value 方法將值指定給實例變數 @value,由於 Ruby 中若發現=指定,會將值指定給區域變數,為了區別,這種情況下必須使用 self 明確指定,是要呼叫 value() 方法,而不是設定區域變數,如果沒有指定 self,就會如下:
在單例方法或實例方法中,self 代表呼叫方法時逗號左邊的物件。例如:
在類別本體中,self 代表類別本身(也就是 Class 實例)。例如:
所以,在定義類別方法時,可以使用 self 代替具體的類別名稱。例如:
- class Some
- def Some.action
- puts "Some.action"
- end
- end
- class Some
- def self.action
- puts "Some.action"
- end
- end
沒有留言:
張貼留言