Ruby 程式設計/物件介紹
就像 Smalltalk 一樣,Ruby 是一種純面向物件的語言——一切都是物件。相比之下,像 C++ 和 Java 這樣的語言是混合語言,將世界劃分為物件和 基本型別。混合方法在某些應用程式中可以獲得更好的效能,但純面向物件方法更一致,使用起來更簡單。
使用 Smalltalk 的術語,物件可以執行以下三件事。
- 儲存狀態,包括對其他物件的引用。
- 接收訊息,來自自身和其他物件。
- 在處理訊息的過程中,傳送訊息,既傳送給自己,也傳送給其他物件。
如果您沒有 Smalltalk 背景,用以下方式重新表述這些規則可能更有意義。
- 物件可以包含資料,包括對其他物件的引用。
- 物件可以包含方法,這些方法是具有對物件資料特權訪問許可權的函式。
- 物件的方法可以呼叫/執行其他方法/函式。
讓我們啟動 irb 來更好地理解物件。
$ irb --simple-prompt >> comedian = "Stephen Colbert" => "Stephen Colbert"

在第一行中,我們建立了一個包含文字 "Stephen Colbert" 的 String 物件。我們還告訴 Ruby 使用變數 comedian 來引用這個物件。
接下來,我們告訴 Ruby 也使用變數 favorite_comedian 來引用同一個 String 物件。
>> favorite_comedian = comedian => "Stephen Colbert"

現在,我們有兩個變數可以用來引用同一個 String 物件——comedian 和 favorite_comedian。由於它們都引用同一個物件,如果物件發生更改(我們將在下面看到),更改將顯示在使用任何一個變數時。
在 Ruby 中,以 感嘆號(也稱為“驚歎號”)結尾的方法會修改物件。例如,方法 upcase! 將 String 的字母更改為大寫。
>> comedian.upcase! => "STEPHEN COLBERT"
由於變數 comedian 和 favorite_comedian 都指向同一個 String 物件,因此我們可以使用任何一個變數看到新的、大寫的文字。
>> comedian => "STEPHEN COLBERT" >> favorite_comedian => "STEPHEN COLBERT"

不以感嘆號結尾的方法會返回資料,但不會修改物件。例如,downcase! 透過將所有字母改為小寫來修改 String 物件。但是,downcase 會返回 String 的小寫副本,但原始字串保持不變。
>> comedian.downcase => "stephen colbert" >> comedian => "STEPHEN COLBERT"
由於原始物件仍然包含文字 "STEPHEN COLBERT",您可能想知道新的 String 物件(帶有小寫文字)去了哪裡。好吧,irb 打印出其內容後,由於我們沒有分配變數來跟蹤它,因此無法再訪問它。它基本上消失了,Ruby 會處理掉它。
但是,如果你的最喜歡的喜劇演員不是 Stephen Colbert 呢?讓我們將 favorite_comedian 指向一個新的物件。
>> favorite_comedian = "Jon Stewart" => "Jon Stewart"
現在,每個變數都指向一個不同的物件。

假設我們再次改變主意。現在,我們最喜歡的喜劇演員是 Ellen DeGeneres。
>> favorite_comedian = "Ellen DeGeneres" => "Ellen DeGeneres"
現在,沒有變數再指向 "Jon Stewart" String 物件了。因此,Ruby 會處理掉它。
