我正在使用Rails 4.2.5。如果我有這一切如何在單行中編寫此代碼?
urls_hash[provider.capitalize]
我得到的錯誤,「未定義的方法`[]爲零:NilClass」。我如何編寫上面這樣的,如果散列是空的,什麼都不輸出,否則散列的給定部分輸出?
我正在使用Rails 4.2.5。如果我有這一切如何在單行中編寫此代碼?
urls_hash[provider.capitalize]
我得到的錯誤,「未定義的方法`[]爲零:NilClass」。我如何編寫上面這樣的,如果散列是空的,什麼都不輸出,否則散列的給定部分輸出?
唱紅寶石2.3+,你可以使用安全導航操作,以避免三元檢查:
urls_hash&.fetch(provider.capitalize, nil)
嘗試
urls_hash.blank? ? "" : urls_hash[provider.capitalize]
或
urls_hash[provider].capitalize
第二個選項將大寫的urls_hash[provider]
'urls_hash'是'nil',而不是'{}',仍然不會響應'[]'。 – PJSCopeland
然後使用這個'urls_hash.blank? ? 「」:urls_hash [provider] .capitalize' – Lymuel
內容你可以試試這個:如果你是U
urls_hash[provider].capitalize if urls_hash.has_key? "provider"
'urls_hash'是'nil',而不是'{}',並且也不會響應'has_key?'。 – PJSCopeland
(Lucas Nelson's answer是有用的,但是這也適用,如果你正在使用Rails用Ruby 2.2以下。)
散列不是空({}
),它是完全丟失(nil
)。根據您的標籤我假設你使用Rails的,在這種情況下,你可以這樣做:
url_hash.try(:[], provider.capitalize)
#try
是基本相同#send
,但nil.try
回報nil
。所以,你可以鏈接一個默認值到使用||
操作上面的電話:
url_hash.try(:[], provider.capitalize) || 'Provider not specified'
非常正確。結果是一樣的。我很想說我喜歡這樣做,因爲它避免了在我的答案中使用'fetch'和一個零參數稍微古怪的用法。 –
要實現 – Lymuel
它應該是urls_hash [「提供者」]什麼做資本利用的方法應該叫上返回的值通過散列ie即urls_hash [「provider」] – sghosh968
這取決於,也許哈希鍵是大寫提供程序? –