【问题标题】:How do I shorten a one line if statement in ruby that only executes if field is not empty如何在 ruby​​ 中缩短仅在字段不为空时执行的单行 if 语句
【发布时间】:2013-05-18 14:19:04
【问题描述】:

如果函数不返回空值,我有以下 if 语句用函数的结果填充字段。

我想我之前看过一些例子,空检查和函数可以在 if 中组合,而我不必在条件下再次重复整个函数。

我正在寻找新的 DRY 建议!

icons = page.search("theicons").to_s if !page.search("theicons").to_s.empty?

【问题讨论】:

  • 为什么需要page.search("theicons").to_s

标签: ruby-on-rails ruby ruby-on-rails-3 if-statement coding-style


【解决方案1】:

有什么问题

theicons = page.search("theicons").to_s
icons = theicons unless theicons.empty?

【讨论】:

    【解决方案2】:

    如果您使用的是 Rails,您可以将其缩短为:

    icons = page.search("theicons").to_s.presence || icons
    

    【讨论】:

      【解决方案3】:

      您可以使用逻辑运算符:

      icons = (page.search('theicons') || default_value).to_s
      

      【讨论】:

      • 空字符串计算结果为true
      • 我第一次看到这个。现在它已经修复了。
      • 如果 page.search 返回空字符串,则该字段仍会被它覆盖。
      【解决方案4】:

      试试这个:

      icons = page.search("theicons").to_s.present? && page.search("theicons").to_s
      

      注意:present? 是一个 Rails 助手。

      【讨论】:

      • 我认为我们不想多次调用 page.search。
      【解决方案5】:
      icons = page.search("theicons") unless page.search("theicons").present?
      

      icons ||= page.search("theicons")
      

      【讨论】:

        猜你喜欢
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 2013-08-22
        • 2015-06-29
        相关资源
        最近更新 更多