【问题标题】:Conditional assignment with empty strings带空字符串的条件赋值
【发布时间】:2017-10-10 09:42:50
【问题描述】:

我喜欢 Ruby 中的条件赋值语法并一直使用它:

x = this_var || that_var

现在我正在使用几个 API,它们为不存在的值返回空字符串。由于空字符串在 Ruby 中的计算结果为 true,因此我不能再使用上面的语法来设置默认值。当我有几个“级别”的默认值时,情况会变得更糟,例如“如果此 var 不存在,请将其设置为该 var,如果该 var 也不存在,请将其设置为另一个 var”。所以我最终这样做了:

x = if this_var.present?
       this_var
    elsif that_var.present?
       that_var
    else
       last_resort
    end

.present? 方法有帮助,但作用不大。我如何以更简洁的方式编写这样的东西?

我正在使用 Rails 4,因此欢迎使用 Rails 方法作为答案:)

谢谢

【问题讨论】:

  • 如果您使用的是库,请说明清楚。
  • @sawa:值得称赞的是,哪些东西是 rails 而不是标准 ruby​​ 并不总是很明显。你不能指望他为他的 gemfile 中的所有 gem 添加标签。
  • @sawa 是的,我正在使用 Rails,但问题并不意味着我需要一个 Rails 方法来做我想做的事情,如果有一个原生的 Ruby 方法。我只是碰巧在我的示例中使用了 rails 方法。无论如何我都会更新问题。

标签: ruby-on-rails ruby


【解决方案1】:

这是您使用present? 的兄弟presence 的地方(假设您使用rails 或至少积极支持)。

x = this_var.presence || that_var.presence || last_resort

【讨论】:

    【解决方案2】:
    x = [this_var, that_var, last_resort].find(&:present?)
    

    【讨论】:

    • .compact.first 呢?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多