我正在使用Rails 4.2.5。如果我自己拥有这一切
urls_hash[provider.capitalize]
我得到错误,“未定义的方法`[]'为nil:NilClass”。如何编写上面的内容,如果哈希为空,则不输出任何内容,否则输出哈希的给定部分?
答案 0 :(得分:2)
如果您使用的是Ruby 2.3+,则可以使用安全导航操作符来避免三元检查:
urls_hash&.fetch(provider.capitalize, nil)
答案 1 :(得分:1)
(Lucas Nelson's answer很有用,但是如果你在Ruby 2.2或更低版本中使用Rails,这也很有用。)
哈希不是空({}
),完全缺失(nil
)。根据你的标签我假设你正在使用Rails,在这种情况下你可以这样做:
url_hash.try(:[], provider.capitalize)
#try
与#send
基本相同,但nil.try
会返回nil
。因此,您可以使用||
运算符将默认值链接到上述调用:
url_hash.try(:[], provider.capitalize) || 'Provider not specified'
答案 2 :(得分:0)
试
urls_hash.blank? ? "" : urls_hash[provider.capitalize]
或
urls_hash[provider].capitalize
第二个选项将大写urls_hash[provider]
答案 3 :(得分:-1)
你可以试试这个:
urls_hash[provider].capitalize if urls_hash.has_key? "provider"