Ruby 2.0.0支持關鍵字參數(KA),我想知道在純Ruby環境中該功能的優點/用例 - 尤其是當根據由於每次調用具有關鍵字參數的方法時需要執行的關鍵字匹配而導致性能損失。何時在Ruby中使用關鍵字參數又名命名參數
require 'benchmark'
def foo(a:1,b:2,c:3)
[a,b,c]
end
def bar(a,b,c)
[a,b,c]
end
number = 1000000
Benchmark.bm(4) do |bm|
bm.report("foo") { number.times { foo(a:7,b:8,c:9) } }
bm.report("bar") { number.times { bar(7,8,9) } }
end
# user system total real
# foo 2.797000 0.032000 2.829000 ( 2.906362)
# bar 0.234000 0.000000 0.234000 ( 0.250010)
要添加到答案中,請在需要將參數分配給方法定義內的變量並避免自己編寫自定義代碼時使用它們。 – Kashyap 2013-02-25 08:17:50
請不要欺騙我們。 'def welcome_message(message,options = {:name =>'hoge'}); 「#{message},#{options [:name]}」; end'是'welcome_message'的一行代碼。但是,這種方法的主要缺點是需要用'key_valid?'擴展'Hash'或希望傳遞的鍵是正確的。 KA方法可以準確指定允許哪些鍵。 – mudasobwa 2013-02-25 08:52:29
@mudasobwa對我來說,你錯了;與你的功能,'WELCOME_MESSAGE( 「信息」,{:年齡=> 22})'不會顯示在結果沒有'hoge',但將使用'keyword'。你的函數爲整個散列設置一個默認值,而不是散列定義鍵的默認值。 – oldergod 2013-02-25 09:00:00