鑑於我有一個可能丟失鍵的opts散列,什麼被認爲是更好或更習慣Ruby?這:Ruby風格:默認值散列
my_val = opts.delete(:key){|k| default_value_for_key }
或:
my_val = opts.delete(:key) || default_value_for_key
因爲我想提取值時,從哈希刪除鍵。
鑑於我有一個可能丟失鍵的opts散列,什麼被認爲是更好或更習慣Ruby?這:Ruby風格:默認值散列
my_val = opts.delete(:key){|k| default_value_for_key }
或:
my_val = opts.delete(:key) || default_value_for_key
因爲我想提取值時,從哈希刪除鍵。
關鍵字參數:
如果您在使用Ruby 2.0或更高版本,最習慣的方式來做事是使用keyword arguments:
def foo(bar: 10)
# do something with bar
end
關鍵詞參數功能自動進行分配的護理默認值並在提供未知密鑰時拋出異常。
如果您沒有使用Ruby 2.0,或者由於某些其他原因導致關鍵字參數不起作用,您應該決定您的方法是否會檢測未知鍵並拋出錯誤,或者只是默默地忽略它們。
默默忽略未知鍵:
def foo(opts={})
bar = opts.fetch(:bar, 10)
# do something with bar
end
使用fetch
可以比使用opts[:bar] || 10
,因爲它允許方法的調用者指定bar=nil
或bar=false
更好。如果運算符爲零或爲假,則||
運算符將導致您重寫從散列返回的任何值。
抱怨未知鍵:
如果你有很多的按鍵,並希望當一個未知的給出一個拋出異常,你應該使用delete
。這裏的想法是,當你完成刪除已知密鑰時,只剩下未知的密鑰。
def foo(opts={})
opts = opts.dup # Avoid deleting from the hash the caller passed
# in because that would surprise the caller!
bar = opts.delete(:bar) { 10 }
# get other options
raise "Unknown keys #{opts.keys.inspect}" if !opts.empty?
# do stuff
end
最後一個例子正是我想要做的。謝謝 – rainkinz
第二個樣本很好可讀。 –
這是我一段時間內做這種事的默認方法,但是最近我遇到了一些代碼,它是第一種方式,所以它讓我想知道。 – rainkinz
請注意,這兩段代碼並不總是做同樣的事情。考慮值爲'nil'的情況。 –