參數(Parameter) 被呼叫端用來接收引數的「變數」。
引數(Argument) 引數是呼叫端傳給呼叫對象的「值」,稱為引數。
首先,我們先來設定預設引數的預設值,設定得方法很簡單,只要在定義方法後面寫像是 (x=1, y=2, z=3) 這樣就設定完成。
def arg(x=1,y=2,z=3)
"(#{x},#{y},#{z})"
end
puts arg #=> (1,2,3)
再來看看在呼叫方法時,來觀察歸他的規則
def arg(x=1, y=2, z=3)
"( #{x}, #{y}, #{z} )"
end
puts arg(11) # => ( 11, 2, 3 )
puts arg(11, 22) # => ( 11, 22, 3 )
puts arg(11, 22, 33) # => ( 11, 22, 33 )
—-
def arg(a, b=1, c=2, d, e)
"( #{a}, #{b}, #{c}, #{d}, #{e} )"
end
puts arg(11, 22) # => ArgumentError
puts arg(11, 22, 33) # => ( 11, 1, 2, 22, 33 )
puts arg(11, 22, 33, 44) # => ( 11, 22, 2, 33, 44 )
puts arg(11, 22, 33, 44, 55) # => ( 11, 22, 33, 44, 55 )
第一段程式很清楚,就是給多少就帶多少值
第二段複雜一點點,但也是可以觀察出他的有規則,如果給的引數跟預期數量不一樣的時候,基本上會先依序填補沒有給預設值的位置。
當所的引數比預期多一點的時候,先以程式碼為例,似乎會先從左右判斷先將11,33,44填入,最後再將已有預設值得地方由左至右22填上。
以上是我觀察出來得結果,如果不懂也許可以再多試其他組合,就能更清楚了
喔!對了~這裡要補充一下給引數預設值的規則,當 arg(a=1, b, c=2) 這樣的預設值設定是分開狀況下,執行會出現syntax error
def arg(a=1, b, c=2)
“(#{a}, #{b}, #{c})”
end
puts arg # => syntax error
要改成def arg(a=1, b=2, c)
或def arg(a, b=3, c=5)
預設值設定是相鄰的情況下,才能正常運作
有時候我們會再看到*arr
前綴一個*
的符號的寫法,執行後會得到一個[]
空陣列。
def arg(a=1, *arr, c)
"( #{a}, #{arr}, #{c} )"
end
puts arg(22) # => ( 1, [], 22 )
我們可以拿剛剛的例子來玩玩看,在d的前面加上*符號
def arg(a, b=1, c=2, *d, e)
"( #{a}, #{b}, #{c}, #{d}, #{e} )"
end
puts arg(11, 22)
puts arg(11, 22, 33)
puts arg(11, 22, 33, 44)
puts arg(11, 22, 33, 44, 55)
puts arg(11, 22, 33, 44, 55, 66)
# => ( 11, 1, 2, [], 22 )
# => ( 11, 22, 2, [], 33 )
# => ( 11, 22, 33, [], 44 )
# => ( 11, 22, 33, [44], 55 )
# => ( 11, 22, 33, [44, 55], 66 )
除了沒有值得情況下*d會傳出一個[]
空陣列
而後面的結果將引數帶入,傳出來也會得到陣列
換成字串
def hello(place,*animal)
"這裡是#{place},裡面有#{animal}"
end
puts hello("Zoo","cat","dog","monkey","pig")
# => 這裡是Zoo,裡面有["cat", "dog", "monkey", "pig"]
參考連結:
Ruby女孩