2014-05-16 29 views
1

是新來的Ruby和開始學習Ruby概念傳遞argumnets爲PARAM = {}在Ruby代碼

從下面的代碼段,我只是想知道爲什麼通過params = {}作爲參數 我不明白分配params={} ..what這是否意味着?

def go_to_print_options(params = {}) 
    if 'short' == params['flow'] 
    short_flow_to_print_options(params) 
    else 
    params[:mobile] ? print_options(params) :flow_to_print_options(params) 
    end 
end 

也這是什麼checkinh意味着if 'short' == params['flow']

回答

4

params={}作爲方法的參數表示可以發送可變參數散列作爲參數,而方法調用。如果沒有參數傳遞,它是作爲一個空的哈希,默認處理。

所以,對於上面的方法,你可以調用go_to_print_options(flow: 'short', mobile: 'apple')
你可能不知道,這是不是hash;但有一點 - 如果Hash是函數調用的最後一個參數,則可以跳過大括號

如此高效地爲您的方法: go_to_print_options(flow: 'short', mobile: 'apple')go_to_print_options({flow: 'short', mobile: 'apple'})是相同的。
而在函數定義中,{flow: 'short', mobile: 'apple'}映射到params

params[:flow] #=> 'short' 
params[:mobile] #=> 'apple' 
params[:foo] #=> nil #since no such key is present 

請注意,這些都是上面的符號,你可以傳遞字符串作爲鍵太爲:go_to_print_options("flow" => 'short', "mobile" => 'apple')

如果你只需要調用go_to_print_options。它仍然有效,並且params將是一個空的散列({}),絕對沒有任何密鑰,無論如何。

通過傳遞Hash作爲參數,你可以發送可變數量的參數給你的方法。在方法定義中,您可以將它們作爲params['flow']進行訪問,這將爲上述調用提供short的值。

if 'short' == params['flow']是Ruby中的一個簡單條件。您正在檢查params['flow']short的值是否相等。如果params['flow']確實是short,則將調用底層塊(short_flow_to_print_options(params)

+1

'params = {}'實際上只是表示該方法採用一個參數,其默認值爲空Hash。說'go_to_print_options(6)'仍然是一個有效的方法調用,即使它會在運行時遇到TypeError。 –

+0

是的,我知道。我也應該加上這個答案。 :) 謝謝! – kiddorails

2

params是一個可選參數的方法go_to_print_options。如果在方法被稱爲默認值(這裏,{},爲空Hash)時未使用該方法。

params['flow']獲取散列params'flow'密鑰的值(或nil,如果params沒有這樣的鍵。