Ruby 的方法
Ruby 提供了一種組織代碼并重用的功能,它可以讓我們無需創(chuàng)建冗長的 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
。 為什么一個方法調用在參數用括號括起來,而另一個沒有使用括號?這種情況,純粹是個人習慣問題。如果您過多省略括號,由于優(yōu)先級的問題會讓您很難知道哪個參數與哪個方法調用一起使用,因此,除了最簡單的情況外,我們建議在所有情況下都使用括號。
以下幾行都是等效的。
實例:
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 允許對方法進行別名,從而創(chuàng)建具有不同名稱的方法的副本(盡管使用任何一個名稱調用該方法最終都會調用同一對象)。創(chuàng)建別名使用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. 小結
本章節(jié)我們學習了 Ruby 方法的調用和聲明,如何向方法傳遞單個、多個、不確定個參數,以及方法的別名。