我如何用一行写出来?

时间:2016-03-09 03:16:45

标签: ruby-on-rails hash null conditional

我正在使用Rails 4.2.5。如果我自己拥有这一切

urls_hash[provider.capitalize]

我得到错误,“未定义的方法`[]'为nil:NilClass”。如何编写上面的内容,如果哈希为空,则不输出任何内容,否则输出哈希的给定部分?

4 个答案:

答案 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"