讓我們建立一個 greeter 物件來使用:
一旦建立了 g
物件,它就會記得它的名字是 Pat。嗯,但是我們如何拿到這個名字的值呢?
啊,這樣不行。
揭開物件的面紗
物件中的實例變數(Instance variables)是隱藏的。雖然可以透過檢查(inspect)物件看到這個變數,不過 Ruby
採用了物件導向的思維(譯註: 即封裝),內部屬性資料基本上是隱藏起來的。
到底 Greeter 物件有哪些方法呢?
哇。有這麼多。我們不是只定義了兩個方法,怎麼回事呢? 這裡列出的是所有 Greeter
物件的方法,因此也包括了它所繼承的類別的方法。如果我們只需要 Greeter 自己的方法,可以傳入一個 false
參數,表示我們不希望包括父類別的方法。
看起來好多了。讓我們看看 greeter 物件對哪些方法有反應?
它知道 say_hi
和 to_s
(意思是轉換成字串,這是每個物件都有的方法),但是不知道 name
這個方法。
變更類別,永不嫌晚
那麼要怎麼能夠讀取或修改名字呢? Ruby 提供了一個簡單的方式來讓你存取物件的變數:
在 Ruby
裡你可以再度打開一個類別然後修改它。這個改變會對之後產生的物件,甚至是已經產生的物件產生即時效果。所以,我們來建立一個新的物件試試看
@name
屬性。
attr_accessor
會定義兩個新的方法,name
用來取值,而 name=
用來給值。
可以歡迎任何東西的 MegaGreeter!
這個 greeter 玩膩了,它一次只能處理一個人。要如何能夠有 MegaGreeter
可以不只歡迎這個世界,還可以歡迎不同人,甚至是一群人呢?
接著讓我們開一個新檔案來撰寫 Ruby 程式吧,互動式的 IRB 不適合撰寫較長的程式。
要離開 IRB 請輸入 “quit” 或 “exit” 或按下 Control-D。
把這個檔案存成 “ri20min.rb”,然後在命令提示符號輸入 “ruby ri20min.rb” 來執行它。您應該可以看到輸出是:
Hello World!
Goodbye World. Come back soon!
Hello Zeke!
Goodbye Zeke. Come back soon!
Hello Albert!
Hello Brenda!
Hello Charles!
Hello Dave!
Hello Engelbert!
Goodbye Albert, Brenda, Charles, Dave, Engelbert. Come
back soon!
...
...
這個最後的範例有許多新東西,讓我們來仔細瞧瞧。