我有以下方法:紅寶石調用可選參數
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
有沒有辦法像這樣的輸出,而不檢查變量無效?當我打電話等方法:
method(5,7)
=> 5
=> 2
=> 7
=> 4
我有以下方法:紅寶石調用可選參數
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
有沒有辦法像這樣的輸出,而不檢查變量無效?當我打電話等方法:
method(5,7)
=> 5
=> 2
=> 7
=> 4
的參數取入順序,以便當有此方法:
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
呼叫:
method(5,7)
指:a = 5, b = 7,c = 3(默認值),d = 4(默認值)
沒有指定參數的方法,其他人。
如果你希望能夠指定參數,另一種是使用哈希爲所有PARAMS:
def method(options)
a = options[:a] || 1
b = options[:b] || 2
c = options[:c] || 3
d = options[:d] || 4
end
然後,您可以撥打電話如:
method(d: 5, c: 7)
=> 1
=> 2
=> 7
=> 5
你的第二個建議已被關鍵字參數所棄用。 –
你是對的 - 同樣的原則,但更現代的做法 – Martin
一流行的選擇是用所謂的「命名參數」重新定義你的方法。那麼,它們並不是真正的命名參數,它們只是一些帶有一些語法糖的散列參數。
def method(args)
args = {a: 1, b: 2, c: 3, d: 4}.merge(args)
args.each { |key, val| puts val }
end
method(c: 30, a: 10)
> 10
> 2
> 30
> 4
這裏使用關鍵字參數的好處是什麼?你的代碼似乎對我來說同樣也更復雜。 –
首先,它適用於Ruby 1.9。二,它仍然是流行的開源庫中常用的模式,用於兼容性,而OP將有助於學習這種語法。 – Uzbekjon
好吧,我認爲如果你提到這個問題,它會改善你的答案。 –
正如Taryn East在他的評論中提到的,自從Ruby 2.0以來,您可以使用關鍵字參數來實現您想要做的事情。你只需要定義你的方法不同的一點:
def method(a:1, b:2, c:3, d:4)
puts a
puts b
puts c
puts d
end
然後,你可以把它指定要通過名稱來設置參數,使別人的默認值:
method(a:5, c:7)
=> 5
=> 2
=> 7
=> 4
作爲另一個好處,它提高了可讀性,並且不會讓讀者猜測傳遞值的含義。
是應該怎麼知道你省略b和d,而不是c和d,說什麼? –
你有沒有考慮使用關鍵字參數:https://robots.thoughtbot.com/ruby-2-keyword-arguments (否則,沒有辦法) –