【问题标题】:How do I write this in a single line?我如何在一行中写这个?
【发布时间】:2016-06-23 06:34:49
【问题描述】:

我使用的是 Rails 4.2.5。如果我自己拥有这一切

urls_hash[provider.capitalize]

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

【问题讨论】:

  • 你想达到什么目的
  • 应该是 urls_hash["provider"].capitalize capitalize 方法应该调用散列返回的值,即在 urls_hash["provider"]
  • 这取决于,也许哈希键是大写的提供者?
  • 是的,你是对的@LucasNelson

标签: ruby-on-rails hash null conditional


【解决方案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'

【讨论】:

  • 完全正确。结果是一样的。我想说我更喜欢这种方式,因为它避免了 fetch 在我的答案中带有 nil 参数的稍微奇怪的使用。
【解决方案2】:

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

urls_hash&.fetch(provider.capitalize, nil)

【讨论】:

    【解决方案3】:

    你可以试试这个:

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

    【讨论】:

    • urls_hashnil,不是{},也不会回复has_key?
    【解决方案4】:

    试试

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

    urls_hash[provider].capitalize
    

    第二个选项将urls_hash[provider]的内容大写

    【讨论】:

    • urls_hashnil,而不是{},仍然不会回复[]
    • 然后使用这个urls_hash.blank? ? "" : urls_hash[provider].capitalize
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2019-05-06
    相关资源
    最近更新 更多