13 Ruby 的方法
Ruby 提供了一種組織程式碼並重用的功能,它可以讓我們無需建立冗長的 Ruby 程式碼,在需要它們的時候才會使用它們。對於方法,您只需要學會方法的宣告、呼叫以及傳參即可。在本章中會為您詳細介紹方法的使用。
1. 宣告和呼叫Ruby方法
在 Ruby 中,我們使用def
來宣告定義方法,def
後面接加方法名,end
作為方法的結尾。另外,我們使用方法名()
的形式來呼叫方法,在大多數情況下,我們還可以省略這個括號。
讓我們編寫一個簡單的返回字串的方法,然後呼叫這個方法。
例項:
def sayGoodnight
result = "Goodnight"
return result
end
# 該睡覺了~
puts sayGoodnight() # puts sayGoodnight 和此方法等效
# ---- 輸出結果 ----
Goodnight
解釋: 我們在上述程式碼定義了一個sayGoodnight
的方法,這個方法會返回一個字串名叫“Goodnight”,sayGoodnight()
呼叫了這個方法,然後我們又呼叫了puts
方法,它會將結果打印出來,最後顯示的結果為GoodNight。
Ruby 的方法預設將最後一行作為返回值,所以我們甚至可以省略return
。
例項:
def sayGoodnight
"Goodnight"
end
puts sayGoodnight
# ---- 輸出結果 ----
Goodnight
解釋:sayGoodnight
方法裡面的最後一行字串作為此方法的返回值輸出出來。
2. 將引數傳遞給方法
2.1 一個引數的時候
讓我們來改進一下這個方法,可以傳遞一個名為name
的引數。
例項:
def sayGoodnight(name)
result = "Goodnight, " + name
return result
end
# 該睡覺了~
puts sayGoodnight("John-Boy")
# ---- 輸出結果 ----
Goodnight, John-Boy
解釋: 我們在上個例子調整了sayGoodnight
方法,使他可以傳遞一個引數name
sayGoodnight
這個方法的同時傳遞了一個字串引數"John-Boy"
。最後打印出來內容為:Goodnight,John-Boy。
注意事項: 在第 6 行 ,puts sayGoodnight("John-Boy")
包含兩個方法呼叫,一個是sayGoodnight
,另一個是puts
。 為什麼一個方法呼叫在引數用括號括起來,而另一個沒有使用括號?這種情況,純粹是個人習慣問題。如果您過多省略括號,由於優先順序的問題會讓您很難知道哪個引數與哪個方法呼叫一起使用,因此,除了最簡單的情況外,我們建議在所有情況下都使用括號。
以下幾行都是等效的。
例項:
puts sayGoodnight "John-Boy"
puts sayGoodnight("John-Boy") # 最推薦的寫法
puts(sayGoodnight "John-Boy")
puts(sayGoodnight("John-Boy"))
2.2 多個引數的時候
需要傳遞多個引數的時候引數名用逗號分隔開。
例項:
def sayGoodnight(name1, name2)
result = "Goodnight, " + name1 + ', ' + name2
return result
end
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結果 ----
Goodnight, John-Boy, Alice-Girl
Tips:Ruby方法返回的值是最後一個求值表示式的值,因此我們可以完全省略
return
。
例項:
def sayGoodnight(name1, name2)
"Goodnight, " + name1 + ', ' + name2 # 方法的最後一行即為返回值
end
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結果 ----
Goodnight, John-Boy, Alice-Girl
2.3 不確定引數個數的時候
當我們不確定引數的個數的時候,可以在引數前頭加上*
來解決這個問題,這個引數會轉化成為一個陣列(Array)。
例項:
def sayGoodnight(*names)
result = "Goodnight"
names.each do |name|
result += ', ' + name
end
result # 返回值可以省略return
end
puts sayGoodnight("Andrew")
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結果 ----
Goodnight, Andrew
Goodnight, John-Boy, Alice-Girl
3. 方法的別名
Ruby 允許對方法進行別名,從而建立具有不同名稱的方法的副本(儘管使用任何一個名稱呼叫該方法最終都會呼叫同一物件)。建立別名使用alias
方法。
例項:
def multiply(val1, val2 )
result = val1 * val2
return result
end
alias docalc multiply
puts docalc( 10, 20 )
puts multiply( 10, 20 )
# ---- 輸出結果 ----
200
200
4. 小結
本章節我們學習了 Ruby 方法的呼叫和宣告,如何向方法傳遞單個、多個、不確定個引數,以及方法的別名。