【问题标题】:how to use ruby to assign a default if a value is nil?如果值为 nil,如何使用 ruby​​ 分配默认值?
【发布时间】:2018-01-04 00:17:26
【问题描述】:

如果json_element['LIMIT'] 没有值,我将以下默认设置为 5:

json_element['LIMIT'] = 500
limit           ||=  json_element['LIMIT'].to_i
limit           ||=  5

这是当前的实现,但似乎一行太长了。

【问题讨论】:

  • 反过来:var = value || default_value(即limit = json_element['LIMIT']&.presence || 5)。请注意,只有当 value 不能合法地成为 falsenil 时,您才应该使用它。
  • 限制可能为零,在这种情况下,我希望默认值为 5。是的值不能为零

标签: ruby operators


【解决方案1】:

正如 Amndan 所说,这里的想法是您按优先顺序排列事物,从高到低,从左到右,一般来说:

def do_thing(limit_override)
  limit ||= limit_override || input || DEFAULT
end

在您的情况下,您正在测试 Hash 属性并转换为整数,因此您可以选择:

limit ||= json_element['LIMIT'] ? json_element['LIMIT'].to_i : 5

或者只是 to_i 无论你得到什么,即使它的效率稍微低一点:

limit ||= (json_element['LIMIT'] || 5).to_i

【讨论】:

  • 或者,您也可以像这样使用fetchlimit ||= json_element.fetch('LIMIT', 5).to_i
  • 我不太了解 fetch 示例。 limit 和 5 都是 fetch 函数中的参数?
  • 在链接的文档中,keydefault 都是参数,是的。 default 参数可以省略,在这种情况下它是 nil
猜你喜欢
  • 1970-01-01
  • 2012-11-25
  • 2017-12-05
  • 2017-03-12
  • 1970-01-01
  • 2023-03-30
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多