ruby-on-rails - Rails 哈希空值检查 - 'if-condition' 和'三元运算符'哪个更好?
问题描述
我有以下哈希
instance_options[:param_page]
instance_options[:param_page][:comment_page]
instance_options[:param_page][:comment_per]
我需要comment_page,comment_per 值我做了重构代码但我不确定什么是最好的散列空检查让我知道最好的空检查如果你认识其他人
之前
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
后
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
解决方案
你更进一步:
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
调用:
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
(因为这是用于设置默认值):
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
推荐阅读
- sql - 检查是否有任何数组元素以特定字符 postgres 开头
- android - 由于android中的字节大小不同,某些图像无法从firebase加载
- python - SQLite 从列列表中获取 TOTAL?
- python - 将列表附加到列表时出现意外输出
- python - 如何在 ipdb 中创建条件断点
- java - 如何自动创建类的新实例?
- socrata - Open Payments - 如何协调或解释 API 数据与实时站点可视数据之间的差异
- c++ - C++ 获取运行时间和内存使用情况
- python - 创建一个数据框来详细说明另一个数据框的信息
- node.js - npm install png-img 或 npm install hermione chai 时如何修复错误