我如何在一行中写这个?

How do I write this in a single line?

我正在使用 Rails 4.2.5。如果我一个人拥有这一切

urls_hash[provider.capitalize]

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

尝试

urls_hash.blank? ? "" : urls_hash[provider.capitalize]

urls_hash[provider].capitalize

第二个选项将 urls_hash[provider]

的内容大写

你可以试试这个:

urls_hash[provider].capitalize if urls_hash.has_key? "provider"

如果您使用的是Ruby 2.3+,您可以使用安全导航运算符来避免三元检查:

urls_hash&.fetch(provider.capitalize, nil)

很有用,但如果您使用 Rails 且 Ruby 2.2 或更低,这也适用。)

哈希不是 ({}),而是完全缺失 (nil)。根据您的标签,我假设您使用的是 Rails,在这种情况下您可以这样做:

url_hash.try(:[], provider.capitalize)

#try本质上与#send相同,只是nil.tryreturnsnil。因此,您可以使用 || 运算符将默认值链接到上述调用:

url_hash.try(:[], provider.capitalize) || 'Provider not specified'