我如何在一行中写这个?
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.try
returnsnil
。因此,您可以使用 ||
运算符将默认值链接到上述调用:
url_hash.try(:[], provider.capitalize) || 'Provider not specified'
我正在使用 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)
(
哈希不是空 ({}
),而是完全缺失 (nil
)。根据您的标签,我假设您使用的是 Rails,在这种情况下您可以这样做:
url_hash.try(:[], provider.capitalize)
#try
本质上与#send
相同,只是nil.try
returnsnil
。因此,您可以使用 ||
运算符将默认值链接到上述调用:
url_hash.try(:[], provider.capitalize) || 'Provider not specified'