Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

83 lines (63 sloc) 3.001 kb

如果您想說很多次 "Hello",卻不想敲太多按鍵。是時候定義一個方法了!

irb(main):010:0> def h irb(main):011:1> puts "Hello World!" irb(main):012:1> end => nil

def h 開始定義一個方法。它告訴 Ruby 方法名字是 @h@。下一行是方法的內容,也就是我們之前看過的 puts "Hello World"。接著最後一行 end 表示方法定義結束。 Ruby 回應 => nil 告訴我們它知悉了這個方法定義。

這個簡短可以反覆執行的方法

現在來試試看執行這個方法數次:

irb(main):013:0> h Hello World! => nil irb(main):014:0> h() Hello World! => nil

簡單吧。在 Ruby 中呼叫方法只要輸入方法名字就可以了。如果方法不需要參數,那麼括號可以省略。你也可以加上空括號,但不是必要的。

如果你只想對某個人打招呼呢? 只要重新定義 h 方法接受一個參數即可。

irb(main):015:0> def h(name) irb(main):016:1> puts "Hello #{name}!" irb(main):017:1> end => nil irb(main):018:0> h("Matz") Hello Matz! => nil

正如預期… 讓我們仔細看看到底發生什麼事情。

字串內嵌

什麼是 #{name} 啊? 這是 Ruby 用來在字串中插入資料的方式。大括號裡面的程式會被執行後變成一個字串,然後將整個大括號符號替換掉。例如,我們來把人名變成大寫:

irb(main):019:0> def h(name = "World") irb(main):020:1> puts "Hello #{name.capitalize}!" irb(main):021:1> end => nil irb(main):022:0> h "chris" Hello Chris! => nil irb(main):023:0> h Hello World! => nil

這裡還有幾個小訣竅。第一是我們再次省略了方法的括號。如果方法呼叫很簡單,那麼括號建議你可以省略掉。另一個訣竅是參數有預設值 @World@。意思是說 “如果沒有給 name 參數,那麼就使用預設值 @”World"@"。

發展成 Greeter (接待員)

如果我們需要一個接待員,可以記住你的名字,並且禮貌地歡迎你。你會開始需要使用物件(object)了。讓我們來建立 “Greeter” 類別(class)。

irb(main):024:0> class Greeter irb(main):025:1> def initialize(name = "World") irb(main):026:2> @name = name irb(main):027:2> end irb(main):028:1> def say_hi irb(main):029:2> puts "Hi #{@name}!" irb(main):030:2> end irb(main):031:1> def say_bye irb(main):032:2> puts "Bye #{@name}, come back soon." irb(main):033:2> end irb(main):034:1> end => nil

新的關鍵字是 @class@。這定義了一個新的類別叫做 Greeter,以及屬於這個類別的方法。注意到 @name 這是一個實例變數,可以在類別裡面的方法中存取到。你可以看到在方法 say_hisay_bye 裡使用了它。

如何讓 Greeter 類別動起來呢? 請接著看 建立物件

Jump to Line
Something went wrong with that request. Please try again.