首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails hash null检查- 'if-condition‘和'ternary operator’哪个更好?

Rails hash null检查- 'if-condition‘和'ternary operator’哪个更好?
EN

Stack Overflow用户
提问于 2020-01-31 01:52:55
回答 1查看 209关注 0票数 0

我有下面的散列

代码语言:javascript
复制
instance_options[:param_page]
instance_options[:param_page][:comment_page]
instance_options[:param_page][:comment_per]

我需要comment_page,comment_per值我做了重构代码,但我不确定什么是最好的哈希空检查让我知道最好的空检查,如果你知道其他人

在此之前

代码语言:javascript
复制
comment_page = 1
comment_per = 0
param_page = instance_options[:param_page]
if param_page
  comment_page = param_page[:comment_page].presence || comment_page
  comment_per = param_page[:comment_per].presence || comment_per
end

之后

代码语言:javascript
复制
comment_page = instance_options[:param_page][:comment_page].present? ? instance_options[:param_page][:comment_page] : 1
comment_per = instance_options[:param_page][:comment_per].present? ? instance_options[:param_page][:comment_per] : 10
EN

回答 1

Stack Overflow用户

发布于 2020-01-31 02:48:24

您可以更进一步:

代码语言:javascript
复制
comment_page = instance_options.dig(:param_page, :comment_page).presence || 1
comment_per  = instance_options.dig(:param_page, :comment_per).presence || 0

这将对instance_options进行两次挖掘,但成本将微不足道。如果您需要考虑类型(假设:comment_page值可以是一个字符串),那么您可以添加#to_i调用:

代码语言:javascript
复制
comment_page = (instance_options.dig(:param_page, :comment_page).presence || 1).to_i
comment_per  = (instance_options.dig(:param_page, :comment_per).presence || 0).to_i

或者使用reverse_merge (因为这是用于设置默认值):

代码语言:javascript
复制
param_page = instance_options[:param_page] || {}
param_page.reverse_merge(comment_page: 1, comment_per: 0)
# Then use param_page[:comment_page] and param_page[:comment_per] instead of two locals
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59991786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档