Ruby 的方法
Ruby 提供了一種組織代碼并重用的功能,它可以讓我們無需創(chuàng)建冗長的 Ruby 代碼,在需要它們的時候才會使用它們。對于方法,您只需要學(xué)會方法的聲明、調(diào)用以及傳參即可。在本章中會為您詳細(xì)介紹方法的使用。
1. 聲明和調(diào)用Ruby方法
在 Ruby 中,我們使用def
來聲明定義方法,def
后面接加方法名,end
作為方法的結(jié)尾。另外,我們使用方法名()
的形式來調(diào)用方法,在大多數(shù)情況下,我們還可以省略這個括號。
讓我們編寫一個簡單的返回字符串的方法,然后調(diào)用這個方法。
實(shí)例:
def sayGoodnight
result = "Goodnight"
return result
end
# 該睡覺了~
puts sayGoodnight() # puts sayGoodnight 和此方法等效
# ---- 輸出結(jié)果 ----
Goodnight
解釋: 我們在上述代碼定義了一個sayGoodnight
的方法,這個方法會返回一個字符串名叫“Goodnight”,sayGoodnight()
調(diào)用了這個方法,然后我們又調(diào)用了puts
方法,它會將結(jié)果打印出來,最后顯示的結(jié)果為GoodNight。
Ruby 的方法默認(rèn)將最后一行作為返回值,所以我們甚至可以省略return
。
實(shí)例:
def sayGoodnight
"Goodnight"
end
puts sayGoodnight
# ---- 輸出結(jié)果 ----
Goodnight
解釋:sayGoodnight
方法里面的最后一行字符串作為此方法的返回值輸出出來。
2. 將參數(shù)傳遞給方法
2.1 一個參數(shù)的時候
讓我們來改進(jìn)一下這個方法,可以傳遞一個名為name
的參數(shù)。
實(shí)例:
def sayGoodnight(name)
result = "Goodnight, " + name
return result
end
# 該睡覺了~
puts sayGoodnight("John-Boy")
# ---- 輸出結(jié)果 ----
Goodnight, John-Boy
解釋: 我們在上個例子調(diào)整了sayGoodnight
方法,使他可以傳遞一個參數(shù)name
并打印出來,調(diào)用sayGoodnight
這個方法的同時傳遞了一個字符串參數(shù)"John-Boy"
。最后打印出來內(nèi)容為:Goodnight,John-Boy。
注意事項(xiàng): 在第 6 行 ,puts sayGoodnight("John-Boy")
包含兩個方法調(diào)用,一個是sayGoodnight
,另一個是puts
。 為什么一個方法調(diào)用在參數(shù)用括號括起來,而另一個沒有使用括號?這種情況,純粹是個人習(xí)慣問題。如果您過多省略括號,由于優(yōu)先級的問題會讓您很難知道哪個參數(shù)與哪個方法調(diào)用一起使用,因此,除了最簡單的情況外,我們建議在所有情況下都使用括號。
以下幾行都是等效的。
實(shí)例:
puts sayGoodnight "John-Boy"
puts sayGoodnight("John-Boy") # 最推薦的寫法
puts(sayGoodnight "John-Boy")
puts(sayGoodnight("John-Boy"))
2.2 多個參數(shù)的時候
需要傳遞多個參數(shù)的時候參數(shù)名用逗號分隔開。
實(shí)例:
def sayGoodnight(name1, name2)
result = "Goodnight, " + name1 + ', ' + name2
return result
end
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結(jié)果 ----
Goodnight, John-Boy, Alice-Girl
Tips:Ruby方法返回的值是最后一個求值表達(dá)式的值,因此我們可以完全省略
return
。
實(shí)例:
def sayGoodnight(name1, name2)
"Goodnight, " + name1 + ', ' + name2 # 方法的最后一行即為返回值
end
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結(jié)果 ----
Goodnight, John-Boy, Alice-Girl
2.3 不確定參數(shù)個數(shù)的時候
當(dāng)我們不確定參數(shù)的個數(shù)的時候,可以在參數(shù)前頭加上*
來解決這個問題,這個參數(shù)會轉(zhuǎn)化成為一個數(shù)組(Array)。
實(shí)例:
def sayGoodnight(*names)
result = "Goodnight"
names.each do |name|
result += ', ' + name
end
result # 返回值可以省略return
end
puts sayGoodnight("Andrew")
puts sayGoodnight("John-Boy", "Alice-Girl")
# ---- 輸出結(jié)果 ----
Goodnight, Andrew
Goodnight, John-Boy, Alice-Girl
3. 方法的別名
Ruby 允許對方法進(jìn)行別名,從而創(chuàng)建具有不同名稱的方法的副本(盡管使用任何一個名稱調(diào)用該方法最終都會調(diào)用同一對象)。創(chuàng)建別名使用alias
方法。
實(shí)例:
def multiply(val1, val2 )
result = val1 * val2
return result
end
alias docalc multiply
puts docalc( 10, 20 )
puts multiply( 10, 20 )
# ---- 輸出結(jié)果 ----
200
200
4. 小結(jié)
本章節(jié)我們學(xué)習(xí)了 Ruby 方法的調(diào)用和聲明,如何向方法傳遞單個、多個、不確定個參數(shù),以及方法的別名。